用c#访问2d数组时出错
本文关键字:出错 数组 2d 访问 | 更新日期: 2023-09-27 17:57:32
我是Unity3D和c#的新手。我正在修改在2d阵列中存储一些网格位置,但我遇到了
the array index is out of range
错误,我不知道为什么:
public int[,] myArray;
myArray = new int[,]{
{0,375},
{75,300},
{150,225},
{225,150},
{300,75},
{375,0}
};
Debug.Log(myArray[1,4]); // array index is out of range... why? I expected to get 75.
以下是我寻求帮助的其他一些资源:http://wiki.unity3d.com/index.php/Choosing_the_right_collection_type
https://msdn.microsoft.com/en-us/library/2yd9wwz4.aspx
您有一个6x2的2D数组,而不是2x6的数组。每个";子阵列";您在初始化中指定的是一个";行";,如果您想通过CCD_ 2访问数组。
因此,例如,myArray[0, 1]
是375——第一个"0"的第二个元素;行";,即CCD_ 4。
基本上,您需要调整数组初始化或数组访问。因此,如果你真的想要一个2x6阵列,你需要:
myArray = new int[,] {
{ 0, 75, 150, 225, 300, 375 },
{ 375, 300, 225, 150, 75, 0 }
};
或者您可以保留现有的初始化,并访问myArray[4, 1]
。
C#规范是这样解释的:
对于多维数组,数组初始值设定项的嵌套级别必须与数组中的维度一样多。最外面的嵌套级别对应于最左边的维度,最里面的嵌套级别相应于最右边的维度。数组的每个维度的长度由数组初始化器中相应嵌套级别的元素数量决定。对于每个嵌套数组初始值设定项,元素的数量必须与同一级别的其他数组初始值设置项相同。示例:
int[,] b = {{0, 1}, {2, 3}, {4, 5}, {6, 7}, {8, 9}};
创建一个二维数组,最左边维度长度为5,最右边维度长度为2:
int[,] b = new int[5, 2];
然后用以下值初始化数组实例:
b[0, 0] = 0; b[0, 1] = 1; b[1, 0] = 2; b[1, 1] = 3; b[2, 0] = 4; b[2, 1] = 5; b[3, 0] = 6; b[3, 1] = 7; b[4, 0] = 8; b[4, 1] = 9;