MRが楽しい

MRやVRについて学習したことを書き残す

foreachで要素とインデックスを取得する その2(ListのForEachメソッドを利用する場合)

本日はC#の小ネタ枠です。
foreachで要素とインデックスを取得する方法です。
今回はListのForEachメソッドを利用する場合です。

ForEachで要素とインデックスを取得する

ForEach メソッドでは直接インデックスは取得できないため、この場合も Select メソッドを仲介してリストの要素とインデックスを取得します。

list.Select((value, index) => (value, index)).ToList().ForEach(tuple =>
{
    // 処理
});

Selectはシーケンスの各要素を指定したフォームに変更します。
また各要素のインデックスを取得してフォームに組み込むことができます。
learn.microsoft.com

ForEachは各要素に対して指定されたアクションを実行します。
learn.microsoft.com

サンプルスクリプト

用意したリストの要素とインデックスを全てログ出力する以下のサンプルスクリプトを作成しました。
・ForeachTest2.cs

using System.Collections.Generic;
using System.Linq;
using UnityEngine;

public class ForeachTest2 : MonoBehaviour
{
    [ContextMenu("ForeachIndexTest")]
    public void ForeachIndexTest()
    {
        var list = new List<string> { "Alpha", "Beta", "Gamma", "Delta", "Epsilon" };
        
        // LinqのForEachで要素とインデックスを取得する
        list.Select((value, index) => (value, index)).ToList().ForEach(tuple =>
        {
            Debug.Log($"Index: {tuple.index}, Value: {tuple.value}");
        });
    }
}

以下のログが出力されます。

Index: 0, Value: Alpha
Index: 1, Value: Beta
Index: 2, Value: Gamma
Index: 3, Value: Delta
Index: 4, Value: Epsilon