关于c#:字典联盟到字典?

Dictionary Union to dictionary?

本问题已经有最佳答案,请猛点这里访问。

在我的代码里我有一行

1
var d3 = d.Union(d2).ToDictionary(s => s.Key, s => s.Value);

这感觉很奇怪,因为我很可能会这么做。没有.ToDictionary()。我怎样把一本词典合并起来,并把它当作一本词典保存?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var list = new List<Tuple<int, string>>();
            list.Add(new Tuple<int, string>(1,"a"));
            list.Add(new Tuple<int, string>(3,"b"));
            list.Add(new Tuple<int, string>(9,"c"));
            var d = list.ToDictionary(
                s => s.Item1,
                s => s.Item2);
            list.RemoveAt(2);
            var d2 = list.ToDictionary(
                s => s.Item1,
                s => s.Item2);
            d2[5] ="z";
            var d3 = d.Union(d2).ToDictionary(s => s.Key, s => s.Value);
        }
    }
}


使用"直的"Union的问题在于,它不将字典解释为字典;它将字典解释为IEnumerable>。这就是为什么你需要最后一步。

如果您的字典没有重复的键,这应该工作得更快一些:

1
var d3 = d.Concat(d2).ToDictionary(s => s.Key, s => s.Value);

注意,如果两个字典包含具有不同值的同一个键,那么Union方法也将中断。如果字典包含相同的键(即使它对应于相同的值),则Concat将中断。