复制多维数组的子部分

时间:2012-06-28 09:51:56

标签: c# multidimensional-array

在Processing(基于java的语言)中,我可以这样做;

int [][] a = new int[3][2];
for (int i = 0; i < 3; i++)
{
  a[i][0] = i;
  a[i][1] = i+3;
}
int [] b = a[2];

b是一维数组,其值为2和5.它采用数组a的第2行中的数组。

matlab语法将是

b = a(3,:);

c#有没有等价物?我似乎无法找到任何东西,但似乎是一个非常有用和明显的功能。

由于

3 个答案:

答案 0 :(得分:3)

C#有multidimensional arrays,但它也有数组数组(也称为jagged arrays)。第二种形式是你所追求的:

// This is a jagged array. It has 3 rows, each of which is an int[] in its own right.
// Each row can also have a different number of elements from all the others, so if
// a[i][N] is valid for some i and N, a[x][N] is not necessarily valid for other x != i
var a = new int[3][];

// To populate the array you need to explicitly create an instance for each sub-array
for (int i = 0; i < 3; i++)
{
      a[i] = new[] { i, i + 3 };
}

// And now this is possible:
var b = a[2];

如果手头有多维数组,则需要手动复制。

答案 1 :(得分:1)

C#区分锯齿状数组[][])和多维数组[,]):

Jagged Arrays:

这应该是可能的;每个数组元素本身就是一个数组。

多维数组:

在这里,你必须逐个元素地自己进行复制。

答案 2 :(得分:1)

除了其他答案之外:如果您真的想要副本,即您不希望b[0] = 42;更改a[2][0];,请执行以下操作:

int [] b = (int[])a[2].Clone();