【问题标题】:Linq get element from string list and a position of a char in this listLinq 从字符串列表中获取元素以及该列表中字符的位置
【发布时间】:2021-12-19 11:03:46
【问题描述】:

我想从一个字符串列表中获取一个元素,并使用 linq 获取一个字符在该列表中的位置?

例子:

List<string> lines = new List<string> { "TOTO=1", "TATA=2", "TUTU=3"}

我想从列表中的 TOTO 中提取值 1

这是我的代码的开始

var value= lines.ToList().Single(x =>x.Contains("TOTO=")).ToString().Trim();

如何继续这段代码提取1?

【问题讨论】:

  • 为什么你想要 1 作为结果?那是这个列表中字符的什么位置?您想要两个结果,字符串"1" 和索引5?

标签: list linq substring contains


【解决方案1】:

添加这个:

value = value[(value.LastIndexOf('=') + 1)..];

【讨论】:

    【解决方案2】:

    使用 LINQ 你可以做到这一点:

    List<string> lines = new List<string> { "TOTO=1", "TATA=2", "TUTU=3" };
    
    int value = lines
        .Select(line => line.Split('='))
        .Where(parts => parts[0] == "TOTO")
        .Select(parts => int.Parse(parts[1]))
        .Single();
    

    如果您总是希望该列表中的每个项目都采用正确的格式,那么这应该可以工作,否则您需要添加一些验证。

    【讨论】:

      【解决方案3】:

      类似于@jtate 提出的建议,一些小的改进会有所帮助。

      int value = lines
          .Select(line => line.Split(new []{ '=' }, StringSplitOptions.RemoveEmptyEntries))
          .Where(parts => string.Equals(parts[0], "TOTO", StringComparison.InvariantCultureIgnoreCase))
          .Select(parts => int.Parse(parts[1]))
          .SingleOrDefault();
      

      SingleOrDefault - 如果您没有找到任何与您的约束匹配的元素,Single() 将抛出异常。在这里,SingleOrDefault 将返回 0;

      String.Equals - 会处理任何上下游或任何文化相关的问题。

      StringSplitOptions.RemoveEmptyEntries - 会限制一些不必要的迭代并提高性能。

      还请查看您是否需要 int.TryParse 而不是 int.Prase。所有这些检查将有助于覆盖生产中的边缘情况

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-12-07
        • 1970-01-01
        • 2021-01-29
        • 1970-01-01
        • 2020-01-09
        • 2012-01-12
        • 2020-03-24
        相关资源
        最近更新 更多