
Теперь нетрудно понять, почему такие массивы называются ступенчатыми! После создания ступенчатого массива доступ к его элементам осуществляется по индексу, указываемому в отдельных квадратных скобках. Например, в следующей строке кода элементу массива 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;
Присваивание ссылок на массивы
Присваивание значения одной переменной ссылки на массив другой переменной, по существу, означает, что обе переменные ссылаются на один и тот же массив, и в этом отношении массивы ничем не отличаются от любых других объектов. Такое присваивание не приводит ни к созданию копии массива, ни к копированию содержимого одного массива в другой. В качестве примера рассмотрим следующую программу.
// Присваивание ссылок на массивы.
using System;
class AssignARef {
static void Main() { int i;
int[] numsl = new int [10];
int[] nums2 = new int [10];
for(i=0; i < 10; i++) numsl[i] = i;
for(i=0; i < 10; i++) nums2[i] = -i;
Console.Write("Содержимое массива numsl: ");
for(i=0; i < 10; i++)
Console.Write(numsl[i] + " ");
Console.WriteLine() ;
Console.Write("Содержимое массива nums2: ");
for(i=0; i < 10; i++)
Console.Write(nums2[i] + " ") ;
Console.WriteLine() ;
nums2 = numsl; // теперь nums2 ссылается на numsl
Console.Write("Содержимое массива nums2\n" + "после присваивания: ");
for(i=0; i < 10; i++)
Console.Write(nums2[i] + " ") ;
Console.WriteLine() ;
// Далее оперировать массивом numsl посредством
// переменной ссылки на массив nums2. nums2[3] = 99;
Console.Write("Содержимое массива numsl после изменения\n" +
Читать дальше