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 строк, поэтому ваш первый квадрат должен быть [] not [,]. Элемент в каждой строке (индекс n) - это 2D-массив, поэтому вам нужно использовать [,]. Наконец, вы можете исправить свою проблему, изменив 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

Ahh, я вижу вашу проблему, у меня есть код исправления из вашего примера. – Ekk

+0

Это работает ~ Я думал, что 'int [,]' является типом, поэтому массив этого типа будет 'int [,] []'. Почему это так? – ziyuang

2

Массив 2d массивов является 3d массив:

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 индексов, в результате целого, в то время как Аскер хочет индексировать и вернуться массив 2d. – dapi