2011-11-15 99 views
1

在Java中,我們可以做這方面的工作:在C#多維數組類似於Java

bool[][] something = new bool[5][10]; 

// Then, we can do this, since indexes do not refer to null instances: 
something [3][7] = true; 

然而,同樣的似乎並不在C#編譯。有沒有在C#中這樣做的等效方式?

回答

7

的語法稍有不同:

bool[,] something = new bool[5,10]; 
// Then, we can do this, since indexes do not refer to null instances: 
something [3,7] = true; 

或者,如果你使用的是C#3.0+,你可以稍微簡化申報:

//Doesn't work for fields. 
var something = new bool[5,10]; 

這是一個多維數組。你可以參考MSDN瞭解更多信息。

+0

可能對眼睛更容易與一個'var' :) –

+0

@RussCam - 好點,但我試圖保持它儘可能接近原始代碼。 (這也可能是我知道的所有領域)。 – vcsjones

+0

我明白。我想知道OP是否知道關鍵字? –

3

你問題中的語法會給你在C#中的鋸齒陣列(數組數組)。這些不同於多維數組(單元數組中的元素與內存連續存儲,具有多維索引)。

我還沒有在Java中做過很多工作,但有一點研究表明Java多維數組類似於C#鋸齒陣列,而不是C#多維數組。

要聲明並創建數組的數組,你可以這樣做:

bool[][] something = new bool[5][]; 

這將創建一個五元素的數組的元素是bool[]類型。您需要分別創建元素(或者從別處獲取對它們的引用)。五個陣列不必具有相同的長度:

for (int i = 0; i < something.Length; i++) 
    something[i] = new bool[GetLengthForElement(i)]; 

如果你想他們都爲10元長,你當然可以這樣做,而不是:

for (int i = 0; i < something.Length; i++) 
    something[i] = new bool[10];