如何将整个数组保存在多维数组的插槽中?

时间:2013-05-20 15:52:48

标签: c# arrays multidimensional-array

有没有办法做到以下几点?

int[,] multiArray = new int[5,5];

multiArray[0] = {0, 1, 3, 4, 5};

3 个答案:

答案 0 :(得分:3)

不,对于多维数组,这是不可能的。该数组具有固定的大小,编译器现在不允许分配给该数组的大小。

此外,编译器如何知道您是否打算这样做:

multiArray[0, 0..4] = { 1, 2, 3, 4, 5 };

或者这个:

multiArray[0..4, 0] = { 1, 2, 3, 4, 5 };

但是,您可以使用锯齿状数组:

int[][] multiArray = new int[5][];
multiArray[0] = new[] { 1, 2, 3, 4, 5 };

答案 1 :(得分:0)

我认为您要做的是将数组的每个元素保存到multiArray的同一行但是DIFFERENT列。

multiArray[0][0] = 0;
multiArray[0][1] = 1;
multiArray[0][2] = 2;
multiArray[0][3] = 3;
multiArray[0][4] = 4;
multiArray[0][5] = 5;

我相信这就是你要做的。您也可以使用for循环来简化此操作。

答案 2 :(得分:0)

由于.NET多维数组以行主顺序存储,因此您可以使用Buffer.BlockCopy进行此操作(一次填充一整行)。请注意sizeof(int)的使用,因为此方法对 bytes 进行操作,而非元素(与Array.Copy等方法不同)。

int[,] multiArray = new int[5, 5];

int rowIndex = 0;
int[] rowData = { 0, 1, 3, 4, 5 };

int destOffset = rowIndex * sizeof(int) * multiArray.GetLength(0);
Buffer.BlockCopy(rowData, 0, multiArray, destOffset, rowData.Length * sizeof(int));