Linq 从字符串列表中获取元素以及该列表中字符的位置
Posted
技术标签:
【中文标题】Linq 从字符串列表中获取元素以及该列表中字符的位置【英文标题】:Linq get element from string list and a position of a char in this list 【发布时间】: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
?
【参考方案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。所有这些检查将有助于覆盖生产中的边缘情况
【讨论】:
以上是关于Linq 从字符串列表中获取元素以及该列表中字符的位置的主要内容,如果未能解决你的问题,请参考以下文章