6

我有一个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:{键:1,值:{9、8}}

KeyValuePairTwo:{键:2,值:{9}}

KeyValuePairThree:{键:3,值:{7}}

我猜我需要结合.GroupBy.ToDictionary

4

3 回答 3

4

这就是ToLookup扩展方法的用途。如果键出现两次,ToDictionary 将在哪里抛出,而 ToLookup 则可以使用它并执行您要查找的操作。

于 2012-05-10T04:04:33.817 回答
2
var list = new List<MyClass>();

var dictionary = list.GroupBy(x => x.One)
                     .ToDictionary(x => x.Key, x => x.ToArray());
于 2012-05-10T04:05:50.493 回答
0

这正是你的做法:

Dictionary<int, List<MyClass>> result =
    items.GroupBy(x => x.One).ToDictionary(x => x.Key, x => x.ToList());
于 2012-05-10T04:08:59.523 回答