为了清楚起见,我们说我们有学生和班级,这是一个多对多的关系。
我有一个词典,其中键是学生ID,而Enumerable是一个类的集合(比如我们只有id),我想将它恢复为classId的词典,学生
有没有办法用Linq做到这一点?我可以想办法用循环来做这个,但我确信有办法做到这一点。
答案 0 :(得分: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));
答案 1 :(得分: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);