2

在处理(基于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#有什么等价物吗?我似乎找不到任何东西,但似乎是一个相当有用且明显的功能。

谢谢

4

3 回答 3

3

C# 有多维数组,但也有数组数组(也称为锯齿数组)。第二种形式是您所追求的:

// 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];

如果您手头有一个多维数组,则需要手动进行复制。

于 2012-06-28T09:58:14.030 回答
1

C# 区分交错数组( [][]) 和多维数组( [,]):

锯齿状阵列:

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

多维数组:

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

于 2012-06-28T09:58:01.670 回答
1

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

int [] b = (int[])a[2].Clone();
于 2012-06-28T10:03:20.943 回答