本日はC#の小ネタ枠です。
LinqのSelectManyを使って複数のリストを1つのリストにする方法を記事にします。
SelectMany
SelectManyは複数の配列を1つの配列に平坦化します。
learn.microsoft.com
// サンプルとして複数のリストを保持するリストを作成する List<List<int>> list = new List<List<int>> { new List<int> { 1, 2, 3 }, new List<int> { 4, 5, 6 }, new List<int> { 7, 8, 9 }, }; // SelectManyでList<List<int>>をList<int>に変換して値をログ出力する list.SelectMany(x => x).ToList().ForEach(x => Debug.Log(x));
・実行結果
1 2 3 4 5 6 7 8 9
Selectと同様に各要素のインデックスを取得することもできます。
// サンプルとして複数のリストを保持するリストを作成する List<List<int>> list = new List<List<int>> { new List<int> { 1, 2, 3 }, new List<int> { 4, 5, 6 }, new List<int> { 7, 8, 9 }, }; // SelectManyでまとめる際にそれぞれのリスト番号を取得する list.SelectMany((data, groupIndex) => data.Select((listData, listIndex) => new { data = listData, group = groupIndex, index = listIndex })) .ToList() .ForEach(x => Debug.Log($"group:{x.group}, index:{x.index}, data:{x.data}"));
・実行結果
group:0, index:0, data:1 group:0, index:1, data:2 group:0, index:2, data:3 group:1, index:0, data:4 group:1, index:1, data:5 group:1, index:2, data:6 group:2, index:0, data:7 group:2, index:1, data:8 group:2, index:2, data:9