Чтение онлайн

на главную

Жанры

C# 4.0 полное руководство - 2011

Шилдт Герберт

Шрифт:

В качестве примера ниже приведена программа, в которой двумерный массив sqrs инициализируется числами от 1 до 10 и квадратами этих чисел.

// Инициализировать двумерный массив, using System;

class Squares {

static void Main {

int[,] sqrs = {

{ 1, 1 },

{ 2, 4 Ь {'3, 9 },

{ 4, 16 },

{ 5, 25 },

{ 6, 36 },

{ 7, 49 },

{ 8, 64 },

{ 9, 81 },

{ 10, 100 }

};

int i, j;

for(i=0; i < 10; i++) {

for(j =0; j < 2; j++)

Console.Write(sqrs[i,j] + " ");

Console.WriteLine;

}

}

}

При

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

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

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

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

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

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

int[][] jagged = new int[3][]; jagged[0] = new int [4]; jagged[1] = new int[3]; jagged[2] = new int[5];

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

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

строке кода элементу массива j agged, находящемуся на позиции с координатами (
2,1), присваивается значение 10.

j agged[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 ъ;

// Сохранить значения в первом массиве. 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 12 3

0 12

0 12 3 4

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

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

int[] [,] j agged = new int [ 3] [,];

В следующей строке кода элементу массива j agged [ 0 ] присваивается ссылка на массив размерами 4><2.

jagged[0] = new int [4, 2];

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

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

Присваивание ссылок на массивы

Присваивание значения одной переменной ссылки на массив другой переменной, по существу, означает, что обе переменные ссылаются на один и тот же массив,

Поделиться:
Популярные книги

Виктор Глухов агент Ада. Компиляция. Книги 1-15

Сухинин Владимир Александрович
Виктор Глухов агент Ада
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Виктор Глухов агент Ада. Компиляция. Книги 1-15

Идеальный мир для Лекаря 10

Сапфир Олег
10. Лекарь
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 10

Довлатов. Сонный лекарь 2

Голд Джон
2. Не вывожу
Фантастика:
альтернативная история
аниме
5.00
рейтинг книги
Довлатов. Сонный лекарь 2

Цветы сливы в золотой вазе, или Цзинь, Пин, Мэй

Ланьлинский насмешник
Старинная литература:
древневосточная литература
7.00
рейтинг книги
Цветы сливы в золотой вазе, или Цзинь, Пин, Мэй

Санек 3

Седой Василий
3. Санек
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Санек 3

Враг из прошлого тысячелетия

Еслер Андрей
4. Соприкосновение миров
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Враг из прошлого тысячелетия

Двойня для босса. Стерильные чувства

Лесневская Вероника
Любовные романы:
современные любовные романы
6.90
рейтинг книги
Двойня для босса. Стерильные чувства

Вечный. Книга I

Рокотов Алексей
1. Вечный
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Вечный. Книга I

Кодекс Крови. Книга ХIV

Борзых М.
14. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Крови. Книга ХIV

Хозяйка собственного поместья

Шнейдер Наталья
1. Хозяйка
Фантастика:
фэнтези
5.00
рейтинг книги
Хозяйка собственного поместья

Кротовский, может, хватит?

Парсиев Дмитрий
3. РОС: Изнанка Империи
Фантастика:
попаданцы
альтернативная история
аниме
7.50
рейтинг книги
Кротовский, может, хватит?

Камень. Книга восьмая

Минин Станислав
8. Камень
Фантастика:
фэнтези
боевая фантастика
7.00
рейтинг книги
Камень. Книга восьмая

Мастер 2

Чащин Валерий
2. Мастер
Фантастика:
фэнтези
городское фэнтези
попаданцы
технофэнтези
4.50
рейтинг книги
Мастер 2

Кодекс Крови. Книга Х

Борзых М.
10. РОС: Кодекс Крови
Фантастика:
фэнтези
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга Х