【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}");
            }
        }
    }
}