将字典添加到另一个字典

时间:2010-10-20 21:26:56

标签: c#

  

可能重复:
  Merging dictionaries in C#
  What's the fastest way to copy the values and keys from one dictionary into another in C#?

我有一个字典,里面有一些值,比如说:

Animals <string, string>

我现在收到另一个类似的字典,说:

NewAnimals <string,string>

如何将整个NewAnimals字典附加到动物?

5 个答案:

答案 0 :(得分:90)

foreach(var newAnimal in NewAnimals)
    Animals.Add(newAnimal.Key,newAnimal.Value)

注意:这会在重复键上引发异常。


或者如果您真的想要使用扩展方法路线(我不愿意),那么您可以定义适用于任何AddRange的常规ICollection<T>扩展方法,而不仅仅是Dictionary<TKey,TValue> 1}}。

public static void AddRange<T>(this ICollection<T> target, IEnumerable<T> source)
{
    if(target==null)
      throw new ArgumentNullException(nameof(target));
    if(source==null)
      throw new ArgumentNullException(nameof(source));
    foreach(var element in source)
        target.Add(element);
}

(抛出字典的重复键)

答案 1 :(得分:32)

创建扩展方法,很可能您不止一次要使用此功能,这可以防止重复代码。

<强>实施

 public static void AddRange<T, S>(this Dictionary<T, S> source, Dictionary<T, S> collection)
 {
        if (collection == null)
        {
            throw new ArgumentNullException("Collection is null");
        }

        foreach (var item in collection)
        {
            if(!source.ContainsKey(item.Key)){ 
               source.Add(item.Key, item.Value);
            }
            else
            {
               // handle duplicate key issue here
            }  
        } 
 }

<强>用法:

Dictionary<string,string> animals = new Dictionary<string,string>();
Dictionary<string,string> newanimals = new Dictionary<string,string>();

animals.AddRange(newanimals);

答案 2 :(得分:9)

最明显的方法是:

foreach(var kvp in NewAnimals)
   Animals.Add(kvp.Key, kvp.Value); 
  //use Animals[kvp.Key] = kvp.Value instead if duplicate keys are an issue

由于Dictionary<TKey, TValue>显式实现了ICollection<KeyValuePair<TKey, TValue>>.Add方法,您也可以这样做:

var animalsAsCollection = (ICollection<KeyValuePair<string, string>>) Animals;

foreach(var kvp in NewAnimals)
   animalsAsCollection.Add(kvp);

遗憾的是,该课程没有像AddRange这样的List<T>方法。

答案 3 :(得分:3)

简短的回答是,你必须循环。

有关此主题的更多信息:

What's the fastest way to copy the values and keys from one dictionary into another in C#?

答案 4 :(得分:0)

您可以使用foreach遍历所有动物并将其放入NewAnimals。