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

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

What's the fastest way to copy the values and keys from one dictionary into another in C#?

似乎没有dictionary.AddRange()方法。 有谁知道一种更好的方式而不使用foreach循环将项目复制到另一本词典。

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


Dictionary构造函数带有另一个Dictionary

您必须将其强制转换为IDictionary,但是有一个Add()重载占用了KeyValuePair。但是,您仍在使用foreach。


for / foreach循环没有错。假设的方法AddRange都是这样。

我唯一需要担心的是内存分配行为,因为添加大量条目可能会导致多个重新分配和重新哈希。无法通过给定数量增加现有词典的容量。您最好为两个当前词典分配足够的容量来分配一个新的Dictionary,但是您仍然需要循环才能加载至少其中一个。


1
var Animal = new Dictionary<string, string>();

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

1
Dictionary<string, string> NewAnimals = new Dictionary<string, string>(Animal);

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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;
        }

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

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

如果要创建一个指向新对象的新Dictionary,我认为唯一的方法是通过foreach。


如果要处理两个现有对象,则使用CopyTo方法可能会有所帮助:http://msdn.microsoft.com/zh-cn/library/cc645053.aspx

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


推荐阅读

    linux复制几行命令行?

    linux复制几行命令行?,系统,位置,基本知识,设备,软件,文件,命令,源文件,连

    linux复制当前命令行?

    linux复制当前命令行?,系统,工作,命令,地址,文件,目录,基本知识,信息,源文

    linux中怎样复制命令?

    linux中怎样复制命令?,系统,文件,命令,源文件,目录,密码,基本知识,电脑,目

    linux文件复制的命令?

    linux文件复制的命令?,系统,文件,命令,目录,源文件,基本知识,位置,目标,选

    linux复制命令文件?

    linux复制命令文件?,系统,文件,命令,目录,基本知识,源文件,目标,文件夹,路

    linux复制一个命令?

    linux复制一个命令?,系统,文件,命令,目录,源文件,密码,电脑,基本知识,位置,

    夸虚机linux复制命令?

    夸虚机linux复制命令?,系统,工具,项目,电脑,位置,文件,命令,基本知识,源文

    linux常用命令字典?

    linux常用命令字典?,状态,代码,环境,信息,项目,发行,标准,电脑,基础,文件,lin

    linux命令行如何复制?

    linux命令行如何复制?,位置,系统,文件,命令,目录,工作,源文件,目标,文件名,

    linux剪切复制命令是?

    linux剪切复制命令是?,位置,工作,系统,地址,环境,信息,名称,标准,命令,目录,l

    linux中复制剪切命令?

    linux中复制剪切命令?,位置,文件,系统,电脑,密码,命令,目录,源文件,目标,路

    linux复制命令案列?

    linux复制命令案列?,系统,文件,命令,目录,源文件,文件夹,路径,目标,里面,表

    linux命令行如何复制?

    linux命令行如何复制?,位置,系统,文件,命令,目录,工作,源文件,目标,文件名,

    linux剪切复制命令是?

    linux剪切复制命令是?,位置,工作,系统,地址,环境,信息,名称,标准,命令,目录,l

    linux复制命令案列?

    linux复制命令案列?,系统,文件,命令,目录,源文件,文件夹,路径,目标,里面,表

    linux命令行不能复制?

    linux命令行不能复制?,位置,环境,文件,系统,数字,目录,命令,文件夹,源文件,

    linux复制命令行窗口?

    linux复制命令行窗口?,工作,系统,地址,信息,命令,标准,目录,文件,功能,内容,l

    linux如何复制命令?

    linux如何复制命令?,系统,位置,异常,文件,命令,目录,首次,传播,设备,网上,lin

    文件复制命令linux?

    文件复制命令linux?,系统,地址,文件,目录,位置,工具,命令,目标,文件名,源文