Главная arrow Язык программирования C# arrow C# Полное руководство Герберт Шилдт arrow Ступенчатые массивы C# Полное руководство Герберт Шилдт

Ступенчатые массивы C# Полное руководство Герберт Шилдт

В приведенных выше примерах применения двумерного массива, по существу, создавался так называемый прямоугольный массив. Двумерный массив можно представить в виде таблицы, в которой длина каждой строки остается неизменной по всему массиву Но в C# можно также создавать специальный тип двумерного массива, называемый ступенчатым массивом. Ступенчатый массив представляет собой массив массивов, в котором длина каждого массива может быть разной. Следовательно, ступенчатый массив может быть использован для составления таблицы из строк разной длины.
Ступенчатые массивы объявляются с помощью ряда квадратных скобок, в которых указывается их размерность. Например, для объявления двумерного ступенчатого массива служит следующая общая форма:
   тип [ ] [ ] имя_массива = new тип [размер] [ ];
где размер обозначает число строк в массиве. Память для самих строк распределяется индивидуально, и поэтому длина строк может быть разной. Например, в приведенном ниже фрагменте кода объявляется ступенчатый массив j agged. Память сначала распределяется для его первого измерения автоматически, а затем для второго измерения вручную.
   int [ ] [ ] jagged = new int [ 3 ] [ ] ;
   jagged [0] = new int [4];
   jagged [1] = new int [3];
   jagged [2] = new int [5];

После выполнения этого фрагмента кода массив jagged выглядит так, как показано ниже.

Теперь нетрудно понять, почему такие массивы называются ступенчатыми! После создания ступенчатого массива доступ к его элементам осуществляется по индексу, указываемому в отдельных квадратных скобках. Например, в следующей строке кода элементу массива jagged, находящемуся на позиции с координатами (2,1), присваивается значение 10:
   jagged [2][1] = 10;
Обратите внимание на синтаксические отличия в доступе к элементу ступенчатого и прямоугольного массива.
В приведенном ниже примере программы демонстрируется создание двумерного ступенчатого массива.

// Продемонстрировать применение ступенчатых массивов.

using System;

class Jagged {
   static void Main() {
      int [ ] [ ] jagged = new int [ 3 ] [ ];
      jagged [0] = new int [4];
      jagged [1] = new int [3];
      jagged [2] = new int[ 5];

      int i;

      // Сохранить значения в первом массиве.
      for(i=0; i < 4; i++)
         jagged [0] [i] = i;

      // Сохранить значения во втором массиве.
      for (i=0; i < 3; i++)
         jagged [1] [i] = i;

      // Сохранить значения в третьем массиве.
      for(i=0; i < 5; i++)
      jagged [2] [i] = i;

      // Вывести значения из первого массива.
      for(i=0; i < 4; i++)
         Console .Write (jagged [0] [i] + " ");

      Console.WriteLine ();

      // Вывести значения из второго массива.
      for(i=0; i < 3; i++)
         Console. Write (jagged  [1] [i] + " ");

      Console.WriteLine ();

      // Вывести значения из третьего массива.
      for(i=0; i < 5; i++)
         Console.Write (jagged [2] [i] + " ");

      Console.WriteLine ();
   }
}


Выполнение этой программы приводит к следующему результату:
   0 1 2 3
   0 1 2
   0 1 2 3 4

Ступенчатые массивы находят полезное применение не во всех, а лишь в некоторых случаях. Так, если требуется очень длинный двумерный массив, который заполняется не полностью, т.е. такой массив, в котором используются не все, а лишь отдельные его элементы, то для этой цели идеально подходит ступенчатый массив.
И последнее замечание: ступенчатые массивы представляют собой массивы массивов, и поэтому они не обязательно должны состоять из одномерных массивов. Например, в приведенной ниже строке кода создается массив двумерных массивов.
   int [ ] [, ] jagged = new int [3] [, ];
В следующей строке кода элементу массива jagged [ 0 ] присваивается ссылка на массив размерами 4x2:
   jagged [0] = new int [4, 2];
А в приведенной ниже строке кода элементу массива j agged [ 0 ] [1,0] присваивается значение переменной i.
   jagged[0][1,0] = i;