c# - 将项目部分复制到列表的最佳方法?

标签 c# .net arrays list copy

假设您有两个数组 srcdestdest更大。您想要复制 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/

相关文章:

.net - 以编程方式在桌面上创建 MS SQL Compact 数据库文件

c# - 如何在 WPF 和 ASP.NET MVC 应用程序之间共享最多的代码?

c - 错误: subscripted value is neither array nor pointer nor vector in C

c# - ReactiveCommand IsExecuting 在第一个发出值后更改为 false

c# - SilverLight 5 和 VS2019 - 缺少程序集引用?

c# - 在 CodeSnippetCompileUnit 中导入命名空间

c - 段错误(核心转储)[康威的生命游戏]

arrays - Kotlin:如何创建字符串类型的二维数组

c# - IIS 7.5 : unable to login 中的 MVC5 与 Windows 身份验证

c# - 如何使用 C# 将字符串 ($23.25) 转换为 Decimal - $23.25 in selenium