Книга: C# 4.0: полное руководство

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

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

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

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

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

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

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];

А в приведенной ниже строке кода элементу массива jagged[0] [1,0] присваивается значение переменной i.

jagged[0][1,0] = i;

Оглавление книги


Генерация: 2.184. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз