似乎沒有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