C# 将平面列表展开为 Dictionary>

本文关键字:Dictionary ICollection int 列表 平面 | 更新日期: 2023-09-27 18:33:53

我有一个List<MyClass>

public int MyClass
{
   public int One { get; set; }
   public int Two { get; set; }
}

现在,数据可以(并且确实)如下所示:

一:1,二:9

一:2,二:9

一:1,二:8

一:3,二:7

看看"一"是如何出现两次的?我想将此平面序列投影到分组Dictionary<int,ICollection<int>>

KeyValuePairOne: { Key: 1, Value: { 9, 8 }}

KeyValuePairTwo: { Key: 2, Value: { 9 }}

KeyValuePairThree: { Key: 3, Value: { 7 }}

我猜我需要做.GroupBy.ToDictionary的组合?

C# 将平面列表<T>展开为 Dictionary<T,ICollection<int>>

这就是ToLookup扩展方法的用途。 如果键出现两次,ToDictionary会抛出哪里,ToLookup反而很好,可以做你要找的事情。

var list = new List<MyClass>();
var dictionary = list.GroupBy(x => x.One)
                     .ToDictionary(x => x.Key, x => x.ToArray());

这正是你的做法:

Dictionary<int, List<MyClass>> result =
    items.GroupBy(x => x.One).ToDictionary(x => x.Key, x => x.ToList());