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

Fio*_*ite 5 c# linq merge dictionary

这与有关如何在 C# 中合并两个字典的问题有点相关。提供了一个优雅的 Linq 解决方案,很酷。

但是,这个问题与Dictionary<Object1, Object2>,我有一本字典的值有关List<Object2>.

我正在寻找将 aDictionary<Object1, List<Object2>>,与以下要求合并的解决方案:

  • 如果 Dictionary1 包含与 Dictionary2 相同的键,List<Object2>则应合并它们的列表。您最终会得到一个带有共享密钥的新键值对,以及来自两个字典的组合列表。
  • 如果 Dictionary1 包含 Dictionary2 没有的键,则 Dictionary1 中的List<Object2>列表应该成为值,反之亦然。

这在 Linq 中可能是不可能的,或者可能值得用 for 循环等直接写出来,但是有一个优雅的解决方案会很好。

Kei*_*eau 3

我建议创建您自己的扩展方法。它将更加高效并且更容易修改。

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);
        }
    }
Run Code Online (Sandbox Code Playgroud)