c# - 在 C# 中合并包含列表的字典

标签 c# linq dictionary merge

这与 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/

相关文章:

c# - 声明变量时 'for' 循环的范围

c# - 为什么需要为部分 View 提供完整路径

c# - 在 LINQ 中查询子集合

linq - 从 .NET 客户端使用 ADO.NET 数据服务的服务操作

c# - 选择所有类型的员工,然后选择特定员工

python - 从 json 文件中删除所有 xmlns 标记

c# - 将 16 位字符串拆分为 4 个部分并将它们存储在 C# 中的数组中

c# - newtonsoft json.net - 使用值元组键反序列化字典

ios - 如何仅更改字典键?没有 swift 改变值(value)

c# - 将 IEnumerable<int> 作为参数传递给 WCF 服务