【C#】List<Value> からDictionary<Key, List<Value>> を作る方法
あるデータ構造クラス
class Data { public HogeType Type; public int Value; }
そのクラスのリストがあるとき
List<Data> list;
このリストから
Dictionary<HogeType, List<Data>> dict
このような辞書クラスを作りたいとき。
ポイントはValue部分がListになっているところ。 つまり同じタイプを持つDataクラスをListにまとめたい。
Linqを使えばスマートにかけました
var dict = list .GroupBy(data => data.Type) .ToDictionary(group => group.Key, group => group.ToList());
listに対してGroupByでTypeでまとめてからToDictionary
あまりこういう書き方したことなかったので今更ですが。
Linq便利だなと再認識
全文
using System; using System.Linq; using System.Collections.Generic; public static class C { public enum HogeType { A, B, } class Data { public HogeType Type; public int Value; } public static void Main() { var list = new List<Data>() { new Data { Type = HogeType.A, Value = 1 }, new Data { Type = HogeType.A, Value = 2 }, new Data { Type = HogeType.B, Value = 1 }, new Data { Type = HogeType.B, Value = 2 }, new Data { Type = HogeType.B, Value = 3 }, }; var dict = list .GroupBy(data => data.Type) .ToDictionary(group => group.Key, group => group.ToList()); foreach (var pair in dict) { foreach (var data in pair.Value) { Console.WriteLine($"{pair.Key}, {data.Value}"); } } } }