将Dictionary <t1,t2 =“”>的所有内容添加到另一个词典<t1,t2 =“”>(键和值的相同类型)的最简单方法是什么?

时间:2016-03-17 12:42:02

标签: c#

是否有更简单的方法将source字典的所有内容复制/添加到destination Dictionary<T1, T2>对象,而不是使用下面示例中的两个选项之一?

Dictionary<string, int> source = new Dictionary<string, int>(),
    destination = new Dictionary<string, int>();

source.Add("Developers", 1);
source.Add("just", 2);
source.Add("wanna have", 3);
source.Add("FUN!", 4);

// Option 1 (feels like a hack):
//
source.All(delegate(KeyValuePair<string, int> p)
{
    destination.Add(p.Key, p.Value);
    return true;
});

// Option 2:
//
foreach (string k in source.Keys)
{
    destination.Add(k, source[k]);
}

我所寻找的是.ForEach()

3 个答案:

答案 0 :(得分:5)

是的,您可以使用constructor

Dictionary<string, int> destination = new Dictionary<string, int>(source);

如果destination已经填写,并且你不想丢失它们,请注意我使用它:

foreach (var kv in source)
    if (!destination.ContainsKey(kv.Key))
        destination.Add(kv.Key, kv.Value);

答案 1 :(得分:1)

您可以使用Concat

Dictionary<string, int> dict1 = new Dictionary<string, int>();
dict1.Add("first", 1);
Dictionary<string, int> dict2 = new Dictionary<string, int>();
dict2.Add("second", 2);

dict2 = dict2.Concat(dict1).ToDictionary(k => k.Key, v => v.Value);

这当然不会真正添加&#39;它到字典中,但用新的替换它。您可以使用Union删除重复项。

答案 2 :(得分:0)

static void Main()
{
    Dictionary<string, int> source = new Dictionary<string, int>();
    Dictionary<string, int> destination = new Dictionary<string, int>();
    destination.Add("Apple", 1);
    destination.Add("Banana", 2);
    foreach (var item in destination)
    {
        source.Add(item.Key, item.Value);
    }
    foreach (var item in destination)
    {
        Console.WriteLine("Key is {0} and value is {1}", item.Key, item.Value);
    }       
}