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
的组合?
这就是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());