假设我有一个字符串集合。
List<string> lines = new List<string>(File.ReadAllLines("Test.txt"));
以及用于在该集合中搜索匹配项的正则表达式:
Regex r = new Regex(@"some regular expression");
我怎样才能得到元素的索引,匹配正则表达式?
我有三个想法。
第一个:
var indeces1 = lines.Where(l => r.IsMatch(l))
.Select(l => lines.IndexOf(l));
foreach (int i in indeces1)
{
Console.WriteLine(i);//Do the index-based task instead...
}
我不喜欢它的是IndexOf
在原始集合上使用。我错了吗,没关系?
var indeces2 = lines.Select((l, i) => new { Line = l, Index = i })
.Where(o => r.IsMatch(o.Line));
foreach (var o in indeces2)
{
Console.WriteLine(o.Index);//Do the index-based task instead...
}
它似乎比第一个更好,但是有没有办法在不创建匿名对象的情况下做同样的事情?
最后一个:
for (int i = 0; i < lines.Count; i++)
{
if (r.IsMatch(lines[i]))
{
Console.WriteLine(i);//Do the index-based task instead...
}
}
实际上我现在有这个工作。但是因为我确实喜欢 LINQ,所以我希望有一种 LINQ 方式来做同样的事情。
那么有没有更好的 LINQ 方法来完成这个简单的任务呢?