2009-08-24 80 views
4

为了清楚起见,可以说我们有学生和班级,它是一个多对多的关系。将字典<int,Enumerable>转换为字典<int,Enumerable>反转内容

我有一个字典,其中的关键是学生的id和可枚举是类(比方说,我们只是有ID)的集合,我希望恢复这CLASSID的字典,学生

有一种与Linq做到这一点的方法?我可以想办法用循环做到这一点,但我相信有一种方法可以做到这一点。

回答

7
var newDic = dic 
    .SelectMany(pair => pair.Value 
          .Select(val => new { Key = val, Value = pair.Key })) 
    .GroupBy(item => item.Key) 
    .ToDictionary(gr => gr.Key, gr => gr.Select(item => item.Value)); 
+0

起初我还以为你回答了你自己的问题。男人我累了。 – Amy 2009-08-24 22:08:52

2

这应该这样做:

var invertedDic = dic 
    .SelectMany(x => x.Value, (pair, value) => new {key = pair.Key, value = value}) 
    .GroupBy(x => x.Value, x => x.Key, (value, key) => new {value, key}) 
    .ToDictionary(x => x.Value, x => x.Key); 
相关问题