反转字典非常简单:
var newDic = oldDic.ToDictionary(x => x.Value, x => x.Key);
就这样。
现在,你的问题不同了。它是关于反转在字典上建立的多对多关系。
因此,假设您有 Dictionary>。这个想法是从中提取多对多关系的“中间表”。然后你可以在另一边重新组合它,并重新转换成字典。
对于第一部分,我们将使用 SelectMany 的重载
“将序列的每个元素投影到
一个 IEnumerable,
将结果序列展平为
一个序列,并调用一个结果
每个元素的选择器函数
其中。”
var table =
dict.SelectMany(
x => x.Value,
(dictEntry, entryElement) => new
{
Entity1 = dictEntry.Key,
Entity2 = entryElement
}
);
因此,现在您只需按照您想要的方式重新组合该表,然后将其转换为字典即可。
var newDict =
table
.GroupBy(x => x.Entity2,
x => x.Entity1,
(entity2, entity1) => new {entity1, entity2})
.ToDictionary(x => x.entity2, x => x.entity1);