Урок 9. Прямоугольные массивы

Прямоугольные массивы – массивы, которые содержат несколько измерений, где все строки имеют одинаковую длину.

Для увеличения мерность массива нужно в квадратных скобках дописать запятую, например:

byte[,] array0 = new byte[2, 2];     // создаст массив 2х2
byte[ , , ] array1 = new byte[2, 2, 2];    // создаст массив 2х2х2
…

Двумерный массив можно сравнить с книжным шкафом, в котором номер полки соответствует первому индексу, а номер книги на полке – второму.

8

Пример расположения элементов двумерного массива в памяти и пример обращения к элементам данного массива:

9

К многомерным массивам можно применить и другие варианты создания массива:

int[,] array1 = new int[3,3] {
                                 { 1, 2, 3 },
                                 { 4, 5, 6 },
                                 { 7, 8, 9 }
                              };

int[,] array2 = new int [,]{
                              { 1, 2, 3 },
                              { 4, 5, 6 },
                              { 7, 8, 9 }
                            };

int[,] array3 = {
                   { 1, 2, 3 },
                   { 4, 5, 6 },
                   { 7, 8, 9 }
                 };

Как и с одномерными массивами, с прямоугольными массивами зачастую работают с помощью циклов, так и с двумерными массивами, но есть отличие: при использовании свойство Length для указания количества итераций цикла вывод будет некорректным, поскольку данное свойство возвращает количество элементов в массиве, а не максимальное значение определённого индекса. Например, для массива 4х4 свойство Length вернёт 16. Для получения максимального значения определённого индекса используется метод GetLength, которому в качестве параметра нужно передать уровень вложенности индекса. Например, array.GetLength(1) вернёт максимальное значение второго индекса в массиве.

Пример вывода двумерного массива:

static void Main()
{ 
    int[,] array = new int[4, 7];

    Console.WriteLine(array.Length);

    Console.WriteLine(array.Rank);

    // Заполнение массива
    for (int i = 0; i < array.GetLength(0); i++)
    {
        for (int j = 0; j < array.GetLength(1); j++)
        {
            array[i, j] = i*j+1;
        }
    }

    for (int i = 0; i < array.GetLength(0); i++)
    {
        for (int j = 0; j < array.GetLength(1); j++)
        {
            Console.Write("{0} \t", array[i, j]);
        }
        Console.Write("\n");
    }
   
    
    // Delay.
    Console.ReadKey();
}

10

Трёхмерный массив зачастую сравнивают с несколькими книжными шкафами. Пример описания индексов: 1 индекс – характеризует номер книжного шкафа, 2 индекс – полку в нём и 3 индекс – расположение книги на полке.

11

Пример расположения элементов трёхмерного массива в памяти и пример обращения к элементам данного массива:

12

Пример вывода значений элементов трёхмерного массива с помощью циклов:

static void Main()
{
    int[,,] array =
    {
       {
            { 1, 2, 3 },
            { 4, 5, 6 },
            { 7, 8, 9 }
       },
       {
            { 1, 2, 3 },
            { 4, 5, 6 },
            { 7, 8, 9 }
       },
       { 
            { 1, 2, 3 }, 
            { 4, 5, 6 }, 
            { 7, 8, 9 }
       }
    };


    for (int i = 0; i < array.GetLength(0); i++)
    {
        for (int j = 0; j < array.GetLength(1); j++)
        {
            for (int k = 0; k < array.GetLength(2); k++)
            {
                Console.Write("{0} ", array[i, j, k]);
            }
            Console.Write("\n");
        }
        Console.Write("\n");
    }

    // Delay.
    Console.ReadKey();
}

13

Иногда случаются случаи, когда необходимо узнать количество измерений массива, для этого можно воспользоваться свойством Rank, оно для трёхмерного массива вернёт 3, для четырёхмерного 4 и т.д.

Источник: видеоурок Александра Шевчука "МАССИВЫ"

%D1%81%D1%82%D1%80%D0%B5%D0%BB%D0%BA%D0%B0%20%D0%B2%D0%BB%D0%B5%D0%B2%D0%BE%202 предыдущая статья | следующая статья %D1%81%D1%82%D1%80%D0%B5%D0%BB%D0%BA%D0%B0%20%D0%B2%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%202