我是Unity3D和c#的新手。我正在修补在二维阵列中存储一些网格位置但是我已经遇到了
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
答案 0 :(得分:7)
你有一个6x2的2D数组 - 而不是2x6的2D数组。每个"子阵列"如果您考虑通过array[row, column]
访问数组,那么您在初始化中指定的是一行"行"。
例如,myArray[0, 1]
是375 - 第一个"行"的第二个元素,即{ 0, 375 }
。
基本上,您需要转动数组初始化或数组访问。因此,如果你真的想要一个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;