C#中的数组拼接

5
  1. How do I smartly initialize an Array with two (or more) other arrays in C#?

    double[] d1 = new double[5];
    double[] d2 = new double[3];
    double[] dTotal = new double[8]; // I need this to be {d1 then d2}
    
  2. Another question: How do I concatenate C# arrays efficiently?


4
如果您有需要更改或混合匹配的数组,您应该使用通用列表(generic List)来代替。 - Joel Coehoorn
可能是重复的问题:如何在C#中连接两个数组? - Matt Sach
4个回答

9
您可以使用CopyTo方法:(链接)
double[] d1 = new double[5];
double[] d2 = new double[3];
double[] dTotal = new double[d1.Length + d2.Length];

d1.CopyTo(dTotal, 0);
d2.CopyTo(dTotal, d1.Length);

Msdn有点不清楚,但索引参数指定了目标数组中的索引。 - Julien Hoarau
你需要 d1.length - 1,我相信。 - Rubys
你是对的,我误解了。抱歉。@Rubys:不,你不需要。 - SLaks
首先,我将从d1复制5个双精度数到dTotal。然后,我将从索引5开始将d2复制到dTotal。如果我使用“d1.Length - 1”,我将从索引4开始,并且会丢失d1的最后一个值。 - Julien Hoarau

6
var dTotal = d1.Concat(d2).ToArray();

您可以通过首先创建dTotal,然后使用Array.Copy复制两个输入来使其“更好”。

1
对于大数组来说,这种方法效率较低。 - SLaks
@SLaks: 这就是为什么我添加了一点额外的内容,但即使对于中等大小的数组(多达10000个元素),您可能甚至都不会注意到差异。此外,如果两者都是数组,则Enumerable可能为Concat提供快速选项(必须查看源以确认)。更新:它没有任何快速选项。 - leppie

5

您需要调用 Array.Copy,用法如下:

double[] d1 = new double[5];
double[] d2 = new double[3];
double[] dTotal = new double[d1.length + d2.length];

Array.Copy(d1, 0, dTotal, 0, d1.Length);
Array.Copy(d2, 0, dTotal, d1.Length, d2.Length);

-1
using System.Linq;

int[] array1 = { 1, 3, 5 };
int[] array2 = { 0, 2, 4 };

// Concat array1 and array2.
var result1 = array1.Concat(array2).ToArray();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接