Ступенчатые (зубчатые) массивы

59

Двумерный массив можно представить в виде таблицы, в которой длина каждой строки остается неизменной по всему массиву. Но в C# можно также создавать специальный тип двумерного массива, называемый ступенчатым массивом. Ступенчатый массив представляет собой массив массивов, в котором длина каждого массива может быть разной. Следовательно, ступенчатый массив может быть использован для составления таблицы из строк разной длины.

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

тип [][] имя массива = new тип[размер] [];

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

Давайте рассмотрим пример использования ступенчатого массива:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int i = 0;
            // Объявляем ступенчатый массив
            int[][] myArr = new int[4][];
            myArr[0] = new int[4];
            myArr[1] = new int[6];
            myArr[2] = new int[3];
            myArr[3] = new int[4];

            // Инициализируем ступенчатый массив
            for (; i < 4; i++)
            {
                myArr[0][i] = i;
                Console.Write("{0}\t",myArr[0][i]);
            }

            Console.WriteLine();
            for (i = 0; i < 6; i++)
            {
                myArr[1][i] = i;
                Console.Write("{0}\t", myArr[1][i]);
            }

            Console.WriteLine();
            for (i = 0; i < 3; i++)
            {
                myArr[2][i] = i;
                Console.Write("{0}\t", myArr[2][i]);
            }

            Console.WriteLine();
            for (i = 0; i < 4; i++)
            {
                myArr[3][i] = i;
                Console.Write("{0}\t", myArr[3][i]);
            }

                Console.ReadLine();
        }
    }
}

Созданный массив в данном примере можно структурно представить в виде:

Ступенчатый массив C#

Теперь нетрудно понять, почему такие массивы называются ступенчатыми! После создания ступенчатого массива доступ к его элементам осуществляется по индексу, указываемому в отдельных квадратных скобках.

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

Применение свойства Length при обращении со ступенчатыми массивами

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int[][] myArr = new int[3][];
            myArr[0] = new int[4];
            myArr[1] = new int[10];
            myArr[2] = new int[1];

            Console.WriteLine("Общая длина всего массива: " + myArr.Length);
            Console.WriteLine("\nДлина первой цепи: " + myArr[0].Length);
            Console.WriteLine("\nДлина второй цепи: " + myArr[1].Length);
            Console.WriteLine("\nДлина третьей цепи: " + myArr[2].Length);

            Console.ReadLine();
        }
    }
}
Использование свойства Length в ступенчатом массиве

Обратите особое внимание на то, как свойство Length используется в ступенчатом массиве myArr. Напомним, что двумерный ступенчатый массив представляет собой массив массивов. Следовательно, когда используется выражение myArr.Length то в нем определяется число массивов, хранящихся в массиве myArr (в данном случае — 3 массива). А для получения длины любого отдельного массива, составляющего ступенчатый массив, служит выражение myArr[0].Length.

Пройди тесты
Лучший чат для C# программистов