Трехмерный зубчатый массив

Есть ли способ получить доступ к моему трехмерному зубчатому массиву следующим образом:

jaggedArray[1,2,3];

Я получил следующие фрагменты кода:

        int[][] jaggedArray = new int[3][]
        {
            new int[] { 2, 3, 4, 5, 6, 7, 8 },
            new int[] { -4, -3, -2, -1, 0, 1},
            new int[] { 6, 7, 8, 9, 10 }
        };

        int[,,] dontWork = new int[,,] // expect 7 everywhere in the last dimension
        {
            { { 2, 3, 4, 5, 6, 7, 8 } },
            { { -4, -3, -2, -1, 0, 1} },
            { { 6, 7, 8, 9, 10 } }
        };

person user1772306    schedule 02.02.2013    source источник
comment
Я запутался. Ваш вопрос спрашивает, как получить доступ к 3D-зубчатому массиву, но ваш код, похоже, указывает на то, что у вас есть проблемы с его созданием. Который из них?   -  person svick    schedule 03.02.2013
comment
Я ищу объявление массива, где впоследствии я могу получить доступ к зубчатому массиву, например [x, y, z]. Я могу получить доступ к jaggedArray, например: jaggedArray[0][1]; // 3 например. Второе объявление массива вызывает ошибку. Но я ожидал, что это будет работать так (или похоже).   -  person user1772306    schedule 03.02.2013
comment
Ваш jaggedArray не 3D, а 2D. И единственное, что получить к нему доступ с jaggedArray[i][j]   -  person John Alexiou    schedule 03.02.2013


Ответы (2)


Что касается первого вопроса, вы пытаетесь получить доступ к 3-му элементу 2-го элемента 1-го элемента зубчатого массива:

jaggedArray[1][2][3]

Что касается ошибки, трехмерный массив ожидает одинаковое количество элементов в каждом элементе измерения. Предположим, для простоты, что у вас есть двумерный зубчатый массив, грубое представление того, как он выглядит в памяти, будет таким:

First row  -> 2,   3,  4,  5, 6, 7, 8
Second row -> -4, -3, -2, -1, 0, 1
Third row  -> 6,   7,  8,  9, 10

Вы можете видеть, что каждая строка рассматривается как отдельный массив и, следовательно, может отличаться по размеру. Однако многомерный массив не обладает этим свойством. Его нужно заполнить полностью:

Column    :  0    1   2   3   4  5  6
------------------------------------
First row :  2,   3,  4,  5,  6, 7, 8
Second row: -4,  -3, -2, -1,  0, 1 
Third row :  6,   7,  8,  9, 10

В вашей таблице отсутствуют некоторые ячейки, что не имеет смысла. Вы должны использовать одинаковое количество элементов для каждого измерения.

person antonijn    schedule 02.02.2013
comment
Я понимаю, спасибо. Итак, мое первое объявление массива - правильный путь? - person user1772306; 03.02.2013
comment
@ user1772306 В вашем случае да. В большинстве случаев я предпочитаю многомерные массивы, но это определенно исключение. - person antonijn; 03.02.2013

У вас есть правильный синтаксис для объявления двумерного зубчатого массива, трехмерные зубчатые массивы являются его расширением. Например:

int[][][] jagged3d = new int[][][]
{
    new int[][] { new int[] { 111, 112 }, new int[] { 121, 122, 123 } },
    new int[][] { new int[] { 211 } }
}

Но для доступа к нему вам нужен другой синтаксис:

jagged3d[0][1][2]
person svick    schedule 02.02.2013