Добавить в цитаты Настройки чтения

Страница 74 из 502

<b>1 1  </b>

<b>2 4  </b>

<b>3 9  </b>

<b>4 16 </b>

<b>5 25 </b>

<b>6 36 </b>

<b>7 49 </b>

<b>8 64 </b>

<b>9 81 </b>

<b>10 100</b>

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

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

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

<b><i>тип[] [] имя_массива = new тип [размер] [];</i></b>

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

<b>int[][] jagged = new int[3][]; </b>

<b>jagged[0] = new int [4]; </b>

<b>jagged[1] = new int[3]; </b>

<b>jagged[2] = new int[5];</b>

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

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

<b>jagged[2] [1] = 10;</b>

Обратите внимание на синтаксические отличия в доступе к элементу ступенчатого и прямоугольного массива.

В приведенном ниже примере программы демонстрируется создание двумерного ступенчатого массива.

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

<b>using System;</b>

<b>class Jagged {</b>

<b>  static void Main() {</b>

<b>    int[][] jagged = new int[3][]; </b>

<b>    jagged[0] = new int[4]; </b>

<b>    jagged[1] = new int[3]; </b>

<b>    jagged[2] = new int[5];</b>

<b>    int i;</b>

<b>    // Сохранить значения в первом массиве. </b>

<b>    for(i=0; i &lt; 4; i++)</b>

<b>      jagged[0][i] = i;</b>

<b>    // Сохранить значения во втором массиве. </b>

<b>    for(i=0; i &lt; 3; i++) </b>

<b>      jagged[1][i] = i;</b>

<b>    // Сохранить значения в третьем массиве.</b>

<b>    for(i=0; i &lt; 5; i++) </b>

<b>      jagged[2][i] = i;</b>

<b>    // Вывести значения из первого массива. </b>

<b>    for(i=0; i &lt; 4; i++)</b>

<b>      Console.Write(jagged[0] [i] + &quot; &quot;) ;</b>

<b>    Console.WriteLine();</b>

<b>    // Вывести значения из второго массива, </b>

<b>    for (i=0; i &lt; 3; i++)</b>

<b>      Console.Write(jagged[1][i] + &quot; &quot;);</b>

<b>    Console.WriteLine() ;</b>

<b>    // Вывести значения из третьего массива. </b>

<b>    for(i=0; i &lt; 5; i++)</b>

<b>      Console.Write(jagged[2] [i] + &quot; &quot;) ;</b>

<b>    Console.WriteLine() ;</b>

<b>  }</b>

<b>}</b>

Выполнение этой программы приводит к следующему результату.

<b>0 1 2 3</b>

0 <b>1 2</b>

<b>0 1 2 3 4</b>

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

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