Массивы в C#. Массивы массивов (зубчатые массивы) - C# и .NET

Массивы в C#. Массивы массивов (зубчатые массивы)

Ещё один вид массивов C# – зубчатые массивы или, как их ещё называют – массивы массивов. Массивы массивов представляют из себя последовательность элементов одного типа, но этот тип – массив.

Визуализация массива массивов

Массивы массивов в C# визуально представить следующим образом:

Массивы массивов

Здесь каждый элемент массива – это массив со своей размерностью. Отсюда и второе название – “зубчатый массив”.

Как создать массив массивов в C#

Массив массивов (или зубчатый массив) создается с использованием следующей конструкции:

int[][] arrayName;

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

int[][] arrayName = new int[5][];

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

arrayName[0] = new int[5]; //первый элемент - массив на 5 элементов
arrayName[1] = new int[2]; //второй элемент - массив на 2 элемента
arrayName[2] = new int[3]; //третий элемент - массив на 3 элемента
arrayName[3] = new int[2]; //четвертый элемент - массив на 2 элемента
arrayName[4] = new int[2]; //пятый элемент - массив на 2 элемента

Если нам необходимо сразу инициализировать массив и заполнить его значениями, то можно воспользоваться вот такой конструкцией:

int[][] arrayName = [
                       [1, 2, 3, 4],
                       [1, 2, 3],
                       [1, 2],
                       [1]
                    ];

Здесь мы создали массив массивов на четыре элемента, каждый из которых – массив на 4, 3, 2 и 1 элемент. Или так:

int[][] arrayName = new int[3][];
arrayName[0] = new int[2] { 1, 2 };         
arrayName[1] = new int[3] { 1, 2, 3 };       
arrayName[2] = new int[5] { 1, 2, 3, 4, 5 };

Перебор элементов зубчатого массива C#

В цикле foreach

В отличие от многомерного массива, перебор элементов зубчатого массива с использованием цикла foreachне “разворачивает” массив, так как сами элементы – тоже массивы. Следовательно, перебирать все элементы массивы мы должны следующим образом:

int[][] arrayName = [
                       [1, 2, 3, 4],
                       [1, 2, 3],
                       [1, 2],
                       [1]
                    ];


foreach (var subArray in arrayName) 
{
    foreach (var number in subArray)
        Console.WriteLine(number);
}

здесь первый (внешний) цикл foreachперебирает элементы основного массива, то есть здесь переменная subArray– это массив. Поэтому во внутреннем цикле мы перебираем элементы обычного одномерного массива и переменная number– это уже число.

В цикле for

С циклом forситуация аналогичная – внешний цикл перебирает массивы, внутренний – элементы подмассивов:

for (var i = 0; i < arrayName.Length; i++)
{
    for (j = 0; j < arrayName[i].Length;  j++)
    {
        Console.WriteLine(arrayName[i][j]); //получаем j-й элемент i-го массива
    }
}

но, при этом, в цикле forмы оперируем уже индексами массивов, а не их значениями. Результат перебора будет выглядеть следующим образом:

Массивы массивов

Варианты зубчатых массивов

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

string[][][] strings; //массив массива массивов
string[][][,] strings2;//массив массивов двумерных массивов

Однако, несмотря на то, что язык C# дает нам возможность создавать таких “монстров”, не стоит этим увлекаться, если только это не чисто исследовательский интерес или крайняя необходимость.

Подведем итог

Массивы массивов (или зубчатые массивы) – это вид массивов в C# в которых каждый элемент сам по себе является массивом. Перебор элементов такого массива осуществляется с использованием вложенных циклов.

Домашнее задание №22

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