FindIndex・FindLastIndexメソッドを使ってListから条件に合致する要素のインデックスを取得する(ラムダ式版) C# 3.0
using System;
using System.Collections.Generic;
using System.Linq;
class Sample {
static void Main()
{
var list = new List<string>() {"Alice", "Bob", "Charlie", "Dave", "Eve"};
// "ve"で終わるもののうち、最初の要素のインデックス
Console.WriteLine("FindIndex: {0}", list.FindIndex(s => s.EndsWith("ve")));
// "ve"で終わるもののうち、最後の要素のインデックス
Console.WriteLine("FindLastIndex: {0}", list.FindLastIndex(s => s.EndsWith("ve")));
// "ve"で終わるもののうち、最初の要素のインデックス
// (Select+Firstメソッドを使ったFindIndexとの比較)
Console.WriteLine("Select+First: {0}", list.Select((s, index) => new {Element = s, Index = index}).First(e => e.Element.EndsWith("ve")).Index);
// "ve"で終わるもののうち、最後の要素のインデックス
// (Select+Lastメソッドを使ったFindLastIndexとの比較)
Console.WriteLine("Select+Last: {0}", list.Select((s, index) => new {Element = s, Index = index}).Last(e => e.Element.EndsWith("ve")).Index);
}
}
実行結果
FindIndex: 3 FindLastIndex: 4 Select+First: 3 Select+Last: 4
比較として、LINQのSelectメソッドとFirstメソッド・Lastメソッドを使った場合についても併記しています。 なお、要素が見つからなかった場合は例外InvalidOperationExceptionがスローされるため、必要に応じて実装を書き換える必要があります。