Как инициализировать массив 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}}
};