在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 。