使用c#访问2d数组时出错

fru*_*ops 4 c# grid 2d multidimensional-array unity-game-engine

我是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.
Run Code Online (Sandbox Code Playgroud)

以下是我正在寻求帮助的其他一些资源:http: //wiki.unity3d.com/index.php/Choosing_the_right_collection_type

https://msdn.microsoft.com/en-us/library/2yd9wwz4.aspx

Jon*_*eet 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 }
};
Run Code Online (Sandbox Code Playgroud)

...或者您可以保留现有的初始化和访问权限myArray[4, 1].

C#规范解释如下:

对于多维数组,数组初始值设定项必须具有与数组中的维度一样多的嵌套级别.最外面的嵌套级别对应于最左边的维度,最里面的嵌套级别对应于最右边的维度.数组的每个维度的长度由数组初始值设定项中相应嵌套级别的元素数决定.对于每个嵌套数组初始值设定项,元素数必须与同一级别的其他数组初始值设定项相同.这个例子:

 int[,] b = {{0, 1}, {2, 3}, {4, 5}, {6, 7}, {8, 9}};
Run Code Online (Sandbox Code Playgroud)

为最左边的维度创建一个长度为5的二维数组,为最右边的维度创建一个长度为2的二维数组:

 int[,] b = new int[5, 2];
Run Code Online (Sandbox Code Playgroud)

然后使用以下值初始化数组实例:

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;
Run Code Online (Sandbox Code Playgroud)