2020.6.19

ListのForEachでインデックス付きループ

C#のForEachでインデックス付きループを簡単に実現できる方法がないかと調べて、LinQのSelectで実装したのが半年前。最近、再び必要になったのですが、どうやるのか完全に忘れていたので、メモとして残しておきます。

コード

通常のループ


var colors = new List<string>(){ "red", "green", "blue" };

var i = 0;
colors.ForEach(name => {
    Console.WriteLine("{0} => {1}", i, name);
    i++;
});

LinQのSelectを使ったインデックス付きループ


var colors = new List<string>(){ "red", "green", "blue" };

colors
    .Select((name, index) => new { name, index })
    .ToList()
    .ForEach(color => {
    Console.WriteLine("{0} => {1}", color.index, color.name);
});

上記の実行結果はどちらも以下の出力となります。


0 => red
1 => green
2 => blue

通常のループはスコープ外に変数を用意しないといけないのが微妙。LinQのSelectを使った方法はこれを改善してくれますが、当然、通常のループよりも処理が遅くなるので、そこまでパフォーマンスが重要でない処理で使用します。

C#】関連記事