gpt4 book ai didi

c# - 反向多对多 Dictionary>

转载 作者:IT王子 更新时间:2023-10-29 04:25:55 25 4
gpt4 key购买 nike

实际上 my previous question让我思考我意识到反转 Dictionary不是微不足道的。最优雅、最易读的方法是什么?

同场景学生多对多同类

原创Dicitonary<int, List<int>>其中键是 studentId,值是 List<int>包含 classId 并希望恢复为 Dictionary<classId, List<studentId>>

谢谢

更新:实际上,我刚刚测试了 Luke 和 Bruno 的解决方案,他们会返回正确数量的类(class),无论他们都有相同的学生,都会随着我的进行而更新。

最佳答案

反转字典非常简单:

var newDic = oldDic.ToDictionary(x => x.Value, x => x.Key);

就这些。

现在,您的问题有所不同。它是关于反转建立在字典上的多对多关系。

那么,假设您有 Dictionary >。这个想法是从中提取多对多关系的“中间表”。然后你可以将它重新组合到另一边,并重新转换成字典。

对于第一部分,我们将使用 SelectMany 的重载

"Projects each element of a sequence to an IEnumerable<T>, flattens the resulting sequences into one sequence, and invokes a result selector function on each element therein."

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);

关于c# - 反向多对多 Dictionary<key, List<value>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1325341/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com