4

在我的代码中,我有一行

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

这感觉很奇怪,因为我可能会经常这样做。没有.ToDictionary()。如何合并字典并将其保留为字典?

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);
        }
    }
}
4

1 回答 1

16

The problem with using the "straight" Union is that it does not interpret the dictionaries as dictionaries; it interprets dictionaries as IEnumerable<KeyValyePair<K,V>>. That is why you need that final ToDictionary step.

If your dictionaries do not have duplicate keys, this should work a little faster:

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

Note that the Union method will break too if the two dictionaries contain the same key with different values. Concat will break if the dictionaries contain the same key even if it corresponds to the same value.

于 2013-02-08T14:22:43.693 回答