假设您有两个数组 src
和dest
。 dest
更大。您想要复制 src
中的所有元素到 dest
开头并覆盖任何可能已经存在的东西。为此,我们可以执行 Array.Copy(src, dest, src.Length)
,它比 for 循环更简洁、更高效。
现在,说 dest
变成List<T>
。复制 src
中的所有元素的最有效方法是什么? ?我知道 List 是使用数组在内部实现的,所以如果我们能得到它(当然,除非反射),我们可以做 Array.Copy
这不是问题。
由于上述原因,我并不是在寻找 for 循环,但如果这是唯一的方法,我想那就必须这样做。
编辑:我希望不必在手机上输入代码示例,但从一连串的错误答案看来,我必须这样做:
int[] src = { 1, 2, 3 };
var dest = new List<int>() { 4, 5, 6, 7 };
for (int i = 0; i < src.Length; i++)
{
dest[i] = src[i];
}
我正在寻找的是上面的逻辑等价物,但具有 Array.Copy 的性能。
最佳答案
要获得与 Array.Copy
相同的结果,我会使用
var src = new int[] { 50, 51, 52, 53, 54, 55 };
var dest = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
dest.RemoveRange(0, src.Length);
dest.InsertRange(0, src);
// dest: [ 50, 51, 52, 53, 54, 55, 7, 8, 9, 10, 11, 12 ]
编辑: 此方法比 Array.Copy 慢大约 7 倍,但对于大型数组,比循环数组快得多。如果源数组较小,循环可能是最佳选择。
关于c# - 将项目部分复制到列表的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32030510/