关于c#:将字典添加到另一个字典


Adding a dictionary to another

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

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

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

1
Animals <string, string>

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

1
NewAnimals <string,string>

我怎样才能把整个新动物词典附加到动物上呢?


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

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

或者,如果您真的想使用扩展方法路由(我不会),那么您可以定义一个通用的AddRange扩展方法,它可以在任何ICollection上工作,而不只是在Dictionary上工作。

1
2
3
4
5
6
7
8
9
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 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
            }  
        }
 }

用途:

1
2
3
4
Dictionary<string,string> animals = new Dictionary<string,string>();
Dictionary<string,string> newanimals = new Dictionary<string,string>();

animals.AddRange(newanimals);


最明显的方法是:

1
2
3
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显式实现了docx1〔1〕方法,您也可以这样做:

1
2
3
4
var animalsAsCollection = (ICollection<KeyValuePair<string, string>>) Animals;

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

很遗憾,类没有像eList那样的anAddRange方法。


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

有关此主题的详细信息:

用C语言将值和键从一个字典复制到另一个字典的最快方法是什么?


你可以用前臂把所有的动物圈起来,放到新动物身上。