Как инициализировать массив 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}}};
компилятор будет жаловаться
"Ожидается инициализатор вложенного массива".
Итак, почему это происходит и каков правильный способ инициализации?
Ответы
Ответ 1
Вы пытаетесь создать неровный массив. В вашем массиве есть строки 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}}
};
Ответ 2
Массив массивов 2d представляет собой трехмерный массив:
int[, ,] array3D = new int[,,] { { { 1, 2, 3 } }, { { 4, 5, 6 } } };
Также см. подробнее в MSDN
http://msdn.microsoft.com/en-us/library/2yd9wwz4(v=VS.90).aspx