有没有办法做到以下几点?
int[,] multiArray = new int[5,5];
multiArray[0] = {0, 1, 3, 4, 5};
有没有办法做到以下几点?
int[,] multiArray = new int[5,5];
multiArray[0] = {0, 1, 3, 4, 5};
不,对于多维数组,这是不可能的。数组有一个固定的大小,编译器现在不允许你分配给数组的大小。
此外,编译器如何知道您是否打算这样做:
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 };
我认为您想要做的是将数组的每个元素保存到 multiArray 的同一行但不同的列中。
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 循环来简化它。
由于 .NET 多维数组以行优先顺序存储,因此您可以Buffer.BlockCopy
用于此操作(一次填充一整行)。请注意使用 ,sizeof(int)
因为此方法对字节而不是元素进行操作(与诸如 之类的方法不同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));