本日は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