这与 this question 有点相关,关于如何在 C# 中合并两个字典。提供了一个优雅的 Linq 解决方案,很酷。
但是,该问题与 Dictionary<Object1, Object2>,
有关而我有一本字典,其中的值为 List<Object2>.
我正在寻找合并 Dictionary<Object1, List<Object2>>,
的解决方案具有以下要求:
- 如果 Dictionary1 包含与 Dictionary2 相同的键,则它们的
List<Object2>
列表应该合并。您最终会得到一个带有共享 key 的新键值对,以及来自两个词典的组合列表。 - 如果 Dictionary1 包含 Dictionary2 不包含的关键字,则
List<Object2>
Dictionary1 中的列表应该成为值,反之亦然。
这在 Linq 中可能是不可能的,或者值得用 for 循环等手写出来,但最好有一个优雅的解决方案。
最佳答案
我建议创建您自己的扩展方法。这样会更高效,更容易修改。
public static void MergeDictionaries<OBJ1, OBJ2>(this IDictionary<OBJ1, List<OBJ2>> dict1, IDictionary<OBJ1, List<OBJ2>> dict2)
{
foreach (var kvp2 in dict2)
{
// If the dictionary already contains the key then merge them
if (dict1.ContainsKey(kvp2.Key))
{
dict1[kvp2.Key].AddRange(kvp2.Value);
continue;
}
dict1.Add(kvp2);
}
}
关于c# - 在 C# 中合并包含列表的字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2132562/