在C#中将值和键从一个字典复制到另一个字典的最快方法是什么?

似乎没有dictionary.AddRange()方法。 有没有人知道在不使用foreach循环的情况下将项目复制到另一个字典的更好方法。

我正在使用System.Collections.Generic.Dictionary。 这适用于.NET 2.0。

for / foreach循环没有任何问题。 无论如何,这都是假设的AddRange方法。

我唯一需要关注的是内存分配行为,因为添加大量条目可能会导致多次重新分配和重新散列。 没有办法按给定的数量增加现有词典的容量。 你可能最好分配一个具有足够容量的新词典用于当前的词典,但你仍然需要一个循环来加载至少其中一个。

还有Dictionary构造函数,它接受另一个Dictionary

你必须将它转换为IDictionary ,但是有一个Add()重载,它接受KeyValuePair 。 不过,你还在使用foreach。

 var Animal = new Dictionary(); 

可以将现有的动物词典传递给构造函数。

 Dictionary NewAnimals = new Dictionary(Animal); 

为了好玩,我创建了这个扩展方法到字典。 这应该尽可能地进行深层复制。

 public static Dictionary DeepCopy(this Dictionary<TKey, TValue> dictionary) { Dictionary d2 = new Dictionary(); bool keyIsCloneable = default(TKey) is ICloneable; bool valueIsCloneable = default(TValue) is ICloneable; foreach (KeyValuePair kvp in dictionary) { TKey key = default(TKey); TValue value = default(TValue); if (keyIsCloneable) { key = (TKey)((ICloneable)(kvp.Key)).Clone(); } else { key = kvp.Key; } if (valueIsCloneable) { value = (TValue)((ICloneable)(kvp.Value)).Clone(); } else { value = kvp.Value; } d2.Add(key, value); } return d2; } 

如果您正在处理两个现有对象,您可能会使用CopyTo方法获得一些里程: http : //msdn.microsoft.com/en-us/library/cc645053.aspx

使用其他集合(接收器)的Add方法吸收它们。

我不明白,为什么不使用Dictionary(Dictionary)(由ageektrapped建议)。

您想要执行浅拷贝还是深拷贝? (也就是说,两个词典都指向相同的引用或新词典中每个对象的新副本?)

如果你想创建一个指向对象的词典,我认为唯一的方法是通过foreach