2015-06-22 81 views
4

我是Unity3D和c#的新手。我与存储的二维数组,但是我碰到的用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

回答

7

你有一个2D阵列是6x2 - 不是2x6的。如果您想通过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}}; 

创建与用于最左边的尺寸的五个长度和最右边的尺寸的两个长度的二维数组:

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;