在 C# 中合并两个字典

Ser*_*rge 1 c# .net-4.5

知道这个问题的答案,加入 2 个(仅)字典(.Net 4.5)的方法是什么?

不允许重复,第一个获胜(参见下面的示例)。

using System;
using System.Linq;
using System.Collections.Generic;

public class Program
{
    public static void Main()
    {
        var d1 = new Dictionary<int, string>();
        var d2 = new Dictionary<int, string>();
        // combine both, keep first duplicate only 
        var result = d1.XXX?(d2); 

    }
}
Run Code Online (Sandbox Code Playgroud)

[<1,'a'>, <2, 'b'>]+ [<3,'c'>, <1, 'x'>]= >[<1,'a'>, <2, 'b'>, <3,'c'>]

Xia*_*312 8

你像这样合并它们:

var d1 = new Dictionary<int, string>() { [1] = "one" };
var d2 = new Dictionary<int, string>() { [1] = "un", [2] = "deux" };

var merged = d1.Concat(d2)
    .ToLookup(x => x.Key, x => x.Value)
    .ToDictionary(x => x.Key, g => g.First());
Run Code Online (Sandbox Code Playgroud)

  • 尽管 `ToLookup` 很好,但它比 `GroupBy` 贵一点,因为它在创建最终的 `Dictionary` 之前在内存中创建另一个集合。只有当查找是我想要的集合时,我才会使用它。 (2认同)

Tim*_*ter 6

您可以使用Concat,GroupByFirst

var result = d1.Concat(d2)
               .GroupBy(kv => kv.Key)
               .ToDictionary(g => g.Key, g => g.First().Value);
Run Code Online (Sandbox Code Playgroud)