似乎没有dictionary.AddRange()方法。有没有人知道更好的方式来复制项目到另一个字典,而不使用foreach循环。在C#中将值和键从一个字典复制到另一个字典的最快方法是什么?
我在使用System.Collections.Generic.Dictionary。这是针对.NET 2.0的。
似乎没有dictionary.AddRange()方法。有没有人知道更好的方式来复制项目到另一个字典,而不使用foreach循环。在C#中将值和键从一个字典复制到另一个字典的最快方法是什么?
我在使用System.Collections.Generic.Dictionary。这是针对.NET 2.0的。
for/foreach循环没有问题。无论如何,这都是假设的AddRange方法。
我唯一需要关心的是内存分配行为,因为添加大量的条目可能会导致多次重新分配和重新哈希。没有办法增加给定量的现有字典的容量。你可能会更好地分配一个具有足够容量的新字典,但是你仍然需要一个循环来加载至少其中的一个字典。
有Dictionary
构造函数需要另一个Dictionary
。
你必须投它IDictionary
,但有Add()
过载需要KeyValuePair<TKey, TValue>
。不过,你仍然在使用foreach。
如果你处理的两个现有对象,你可能会得到一些具有里程CopyTo方法:http://msdn.microsoft.com/en-us/library/cc645053.aspx
使用其他集合(接收器),以吸收他们的Add方法。
我无法找到一个字典的添加方法,将采取数组? – Helephant 2008-09-17 10:08:09
我不明白,为什么不使用词典(词典)(由ageektrapped建议)。
是否要执行浅拷贝或深拷贝? (也就是说,两个词典都指向新的字典内的每个对象的同一引用或新副本?)
如果你想创建一个新字典指着新对象,我认为唯一的出路是通过foreach。
浅拷贝是好的。我有两个字典,我在一个方法中填充,我想将第二个较小的字典复制到方法结尾的第一个字典中。我需要在方法的生命周期中将它们分开,因为它们意味着不同的事情。 – Helephant 2008-09-17 10:05:15
为了好玩,我创建了这个扩展方法到字典。这应该尽可能进行深层复制。
public static Dictionary<TKey, TValue> DeepCopy<TKey,TValue>(this Dictionary<TKey, TValue> dictionary)
{
Dictionary<TKey, TValue> d2 = new Dictionary<TKey, TValue>();
bool keyIsCloneable = default(TKey) is ICloneable;
bool valueIsCloneable = default(TValue) is ICloneable;
foreach (KeyValuePair<TKey, TValue> 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;
}
var Animal = new Dictionary < string, string >() ;
一个可以通过现有的动物字典给构造。
Dictionary< string, string > NewAnimals = new Dictionary< string, string >(Animal);
感谢您的回答,但两者的字典必须在我需要做副本的点,他们的项目。 – Helephant 2008-09-17 09:54:15