In my code I have the line
var d3 = d.Union(d2).ToDictionary(s => s.Key, s => s.Value);
This feels odd because its likely I'll do this a lot. There is no .ToDictionary()
. How do I union a dictionary and keep it as a dictionary?
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);
}
}
}
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With