10

我有一個2D數組的數組。例如,它是這樣的:如何初始化2D數組的數組?

{{{0, 0, 1}, {1, 0, 0}} 
{{0, 0, 3}, {2, 1, 2}, {2, 2, 1}, {3, 0, 0}} 
{{0, 0, 7}, {3, 2, 6}, {6, 2, 3}, {6, 3, 2}, {7, 0, 0}}} 

但如果我寫

int [,][] arrays={{{0, 0, 1}, {1, 0, 0}} 
        {{0, 0, 3}, {2, 1, 2}, {2, 2, 1}, {3, 0, 0}} 
        {{0, 0, 7}, {3, 2, 6}, {6, 2, 3}, {6, 3, 2}, {7, 0, 0}}}; 

編譯器會抱怨 「預期」。

如果我寫

int [,][] arrays={new int[,] {{0, 0, 1}, {1, 0, 0}} 
        new int[,] {{0, 0, 3}, {2, 1, 2}, {2, 2, 1}, {3, 0, 0}} 
        new int[,] {{0, 0, 7}, {3, 2, 6}, {6, 2, 3}, {6, 3, 2}, {7, 0, 0}}}; 

編譯器會抱怨

「嵌套數組初始預期」。

那麼,爲什麼會發生這種情況,什麼是正確的初始化方式?

回答

20

你想創建交錯數組。你的數組有n行,所以你的第一個方塊應該是[]不是[,]。每行元素(索引n)是二維數組,因此您需要使用[,]。最後,您可以通過將int [,][]更改爲int[][,]來修復您的問題。

int[][,] arrays = { 
    new int[,] {{0, 0, 1}, {1, 0, 0}}, 
    new int[,] {{0, 0, 3}, {2, 1, 2}, {2, 2, 1}, {3, 0, 0}}, 
    new int[,] {{0, 0, 7}, {3, 2, 6}, {6, 2, 3}, {6, 3, 2}, {7, 0, 0}} 
}; 
+0

我在開頭添加'new int [,] []',但錯誤仍然存​​在。 – ziyuang

+0

啊,我看到你的問題,我從你的例子中添加了更正代碼。 – Ekk

+0

它的工作原理〜我認爲'int [,]'是一種類型,所以這種類型的數組應該是'int [,] []'。爲什麼這樣? – ziyuang

2

二維數組的數組是一個三維數組:

int[, ,] array3D = new int[,,] { { { 1, 2, 3 } }, { { 4, 5, 6 } } }; 

而且多見於MSDN http://msdn.microsoft.com/en-us/library/2yd9wwz4(v=VS.90).aspx

+1

但是,讓固定的最外層指數,這是他的問題,明確,他希望不固定 – Dani

+0

以3D陣列還要求,所有3個指標來提供,從而產生一個整數,而提問者希望索引,並取回一個二維數組。 – dapi