2015-06-22 85 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;