文字列のコレクションがあるとします。
List<string> lines = new List<string>(File.ReadAllLines("Test.txt"));
そして、そのコレクションで一致するものを検索するための正規表現:
Regex r = new Regex(@"some regular expression");
正規表現に一致する要素のインデックスを取得するにはどうすればよいですか?
私には3つのアイデアがあります。
1位:
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の方法はありますか?