在 C# 中将一个字典中的值和键复制到另一个字典中的最快方法是什么?
-
09-06-2019 - |
题
似乎没有dictionary.AddRange() 方法。有谁知道在不使用 foreach 循环的情况下将项目复制到另一个字典的更好方法。
我正在使用 System.Collections.Generic.Dictionary。这是针对 .NET 2.0 的。
解决方案
for/foreach 循环没有任何问题。无论如何,这就是假设的 AddRange 方法要做的全部事情。
我唯一额外担心的是内存分配行为,因为添加大量条目可能会导致多次重新分配和重新哈希。无法将现有词典的容量增加给定量。您可能最好为当前的两个字典分配一个具有足够容量的新字典,但您仍然需要一个循环来加载至少其中一个。
其他提示
有的是 Dictionary
需要另一个的构造函数 Dictionary
.
你必须投射它 IDictionary
, ,但是有一个 Add()
过载需要 KeyValuePair<TKey, TValue>
. 。不过,您仍在使用 foreach。
var Animal = new Dictionary<string, string>();
可以将现有的动物字典传递给构造函数。
Dictionary<string, string> NewAnimals = new Dictionary<string, string>(Animal);
为了好玩,我创建了这个字典扩展方法。这应该尽可能进行深层复制。
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;
}
如果您正在处理两个现有对象,则使用 CopyTo 方法可能会有所帮助: http://msdn.microsoft.com/en-us/library/cc645053.aspx
使用其他集合(接收者)的Add方法来吸收它们。
我不明白,为什么不使用字典( Dictionary )(按照ageektrapped的建议)。
您要执行浅复制还是深复制?(也就是说,两个字典都指向新字典中每个对象的相同引用或新副本?)
如果你想创建一个 新的 字典指向 新的 对象,我认为唯一的方法是通过 foreach.
不隶属于 StackOverflow