将字典添加到另一个
可能重复:
在C#中合并词典
在C#中将值和键从一个字典复制到另一个字典的最快方法是什么?
我有一本有价值的字典,说:
Animals <string, string>
我现在收到另一个类似的字典,说:
NewAnimals <string,string>
我如何将整个NewAnimals字典添加到动物?
foreach(var newAnimal in NewAnimals) Animals.Add(newAnimal.Key,newAnimal.Value)
注意:这将引发重复键上的exception。
或者,如果你真的想要去扩展方法的路线(我不会),那么你可以定义一个通用的AddRange
扩展方法,可以在任何ICollection<T>
,而不是在Dictionary<TKey,TValue>
。
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); }
(抛出重复的字典键)
创build一个扩展方法最有可能你会不止一次地使用这个,这可以防止重复的代码。
执行:
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);
最明显的方法是:
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);
很遗憾,类没有像List<T>
那样的AddRange
方法。
简短的回答是,你必须循环。
有关此主题的更多信息:
在C#中将值和键从一个字典复制到另一个字典的最快方法是什么?
你可以使用foreach循环遍历所有的动物,并将其放入NewAnimals。