我有一个List<MyClass>
:
public int MyClass
{
public int One { get; set; }
public int Two { get; set; }
}
现在,数据可以(并且确实如此):
一:一,二:9
一:2,二:9
一:一,二:8
一:3,二:7
看看“One”出现两次怎么样?我想将这个扁平序列投影到分组Dictionary<int,ICollection<int>>
:
KeyValuePairOne:{Key:1,Value:{9,8}}
KeyValuePairTwo:{Key:2,Value:{9}}
KeyValuePairThree:{Key:3,Value:{7}}
我猜我需要组合使用.GroupBy
和.ToDictionary
?
答案 0 :(得分:4)
这是ToLookup扩展方法的用途。如果密钥出现两次,ToDictionary将抛出的地方,ToLookup可以很好地使用它并完成你正在寻找的东西。
答案 1 :(得分:2)
var list = new List<MyClass>();
var dictionary = list.GroupBy(x => x.One)
.ToDictionary(x => x.Key, x => x.ToArray());
答案 2 :(得分:0)
这正是你要做的:
Dictionary<int, List<MyClass>> result =
items.GroupBy(x => x.One).ToDictionary(x => x.Key, x => x.ToList());