В ступенчатых (или рваных) массивах количество элементов в разных строках может быть различным. В памяти ступенчатый массив хранится в виде массива массивов. Структура двумерного ступенчатого массива:
Объявление ступенчатого массива:
тип [][] имя_массива;
Например:
Фактически мы объявили одномерный массив ссылок на целочисленные одномерные массивы. При таком описании потребуется не только выделять память под одномерный массив ссылок, но и под каждый из целочисленных одномерных массивов. Такое распределение памяти позволяет определять произвольную длину каждой строки массива (отсюда и произошло название массива – ступенчатый).
Например:
int[][] a = new int[3][]; // Создаем три строки
a[0] = new int[2]; // 0-ая строка ссылается на 2-х элементный одномерный массив
a[1] = new int[3]; // 1-ая строка ссылается на 3-х элементный одномерный массив
a[2] = new int[10]; // 2-ая строка ссылается на 10-х элементный одномерный массив
|
Другой способ выделения памяти:
int[][] a = { new int[2], new int[3], new int[10] };
|
Так как каждая строка ступенчатого массива фактически является одномерным массивом, то с каждой строкой можно работать как с экземпляром класса Array. Это является преимуществом ступенчатых массивов перед двумерными массивами.
Пример:
class Program
{
static void Print(int[][] a)
{
for (int i = 0; i < a.Length; i++)
{
for (int j = 0; j < a[i].Length; j++)
{
Console.Write("{0} ", a[i][j]);
}
Console.WriteLine();
}
}
static void Input(out int[][] a)
{
Console.Write("n= ");
int n = int.Parse(Console.ReadLine());
a = new int[n][];
for (int i = 0; i < a.Length; i++)
{
Console.Write("введите количество элементов в {0} строке: ", i);
int j = int.Parse(Console.ReadLine());
a[i] = new int[j];
for (j = 0; j < a[i].Length; j++)
{
Console.Write("a[{0}][{1}]= ", i, j);
a[i][j] = int.Parse(Console.ReadLine());
}
}
}
static void Change(int[][] a)
{
for (int i = 0; i < a.Length; i++)
{
Array.Sort(a[i]);
}
}
static void Main()
{
int[][] a;
Input(out a);
Console.WriteLine("Исходный массив:");
Print(a);
Change(a);
Console.WriteLine("Измененный массив:");
Print(a);
}
}
|
Результат работы программы:
n=3
введите количество элементов в 0 строке: 2
a[0,0]=1
a[0,1]=3
введите количество элементов в 1 строке: 4
a[1,0]=7
a[1,1]=3
a[1,2]=2
a[1,3]=5
введите количество элементов в 2 строке: 3
a[2,0]=0
a[2,1]=5
a[2,2]=2
Исходный массив:
1 3
7 3 2 5
0 5 2
Измененный массив:
1 3
2 3 5 7
0 2 5
|