C#将Flat List <t>展开为Dictionary <t,icollection <int>&gt; </t,icollection <int> </t>

时间:2012-05-10 04:01:18

标签: c# linq dictionary

我有一个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

3 个答案:

答案 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());