- •Глава 9. Многомерные массивы
- •9.1 Прямоугольные массивы
- •9.1.1 Объявления и инициализация
- •9.1.2 Примеры
- •9.2 Ступенчатые массивы
- •9.2.1 Объявления и инициализация
- •9.2.2 Примеры
- •9.3 Оператор цикла с перебором foreach
- •9.4 Массивы с числом размерностей больше двух
- •Контрольные вопросы
- •Варианты заданий для самостоятельной работы
- •Глава 10. Исключительные ситуации
- •10.1 Основные понятия
- •10.2 Механизм обработки исключений
- •10.3 Примеры обработки исключений
- •10.4 Оператор throw
- •10.5 Дополнительные сведения
- •Контрольные вопросы
- •Варианты заданий для самостоятельной работы
- •Глава 11. Обработка текстовой информации
- •11.1 Символьный тип char
- •11.2 Массив символов
- •11.3 Тип String
- •11.4 Класс StringBuilder
- •11.5 Форматирование строк
- •Контрольные вопросы
- •Варианты заданий для самостоятельной работы
Глава 9. Многомерные массивы
В предыдущей главе была рассмотрены аспекты обработки одномерных массивов данных в языке C#, но в повседневной практике приходится разрабатывать алгоритмы значительно сложнее. Очень большой класс задач предполагает работу с массивами более высокой размерности: двумерными, трехмерными и т.д. ЯзыкC#имеет достаточно мощные средства для обработки массивов различной размерности.
9.1 Прямоугольные массивы
Прямоугольный массив имеет более одного измерения. Многомерным называется такой массив, который характеризуется двумя или более измерениями, а доступ к отдельному элементу осуществляется посредством двух или более индексов.
Двумерные массивы являются наиболее простыми из многомерных массивов. К тому же и решение очень многих задач может быть часто сведено к обработке двумерных массивов, поэтому технологии использования двумерных массивов в программах языка С#посвящается целая глава.
9.1.1 Объявления и инициализация
В двумерном массиве позиция любого его элемента определяется двумя индексами. Если представить двумерный массив в виде таблицы данных, то один индекс означает строку, а второй – столбец. Чтобы объявить двумерный массив целочисленных значений размером n * m, достаточно записать следующее:
int[,] имя_массива =newint[n,m];
Следует обратить внимание на то, что синтаксически конструкция вида [,]указывает на создание ссылочной переменной двумерного массива.
Чтобы получить доступ к элементу двумерного массива, используется конструкция переменная с индексами, где необходимо указать оба индекса, разделив их запятой. Например, для присвоения элементу двумерного массива, позиция которого определяется координатами iиj, значениеаможно использовать следующую инструкцию:
имя_массива[i,j] =a;
Многомерный массив можно инициализировать, заключив список инициализаторов каждой размерности в собственный набор фигурных скобок. Формат инициализации двумерного массива:
тип[,] имя_массива = {
{val00,val01,val02, …,val0m}
{val10, val11 val12, …, val1m}
…
{valn0, valn1, valn2, …, valnm}};
Здесь элемент valij– значение инициализации для конкретного элемента массива. Каждый внутренний блок означает строку. В каждой строке первое значение будет сохранено в первой позиции массива, второе значение – во второй и т.д.
Ниже приведены различные варианты описания двумерного массива.
Определяются только тип и имя массива, а размер массива и его элементы не заданы. Синтаксис конструкции:
тип[,] имя;
Пример использования для объявления целочисленного массива:
int[,] а;
Определяются не только тип и имя массива, но и с помощью оператора newзаданы обе размерности массива и его элементам присвоены значения равные0. Синтаксис конструкции:
тип[,] имя = newтип [ разм_1, разм_2 ];
Пример использования для объявления целочисленного массива:
int[,] b = new int [2, 3];
Размерность явно не задана, но она вычисляется компилятором по количеству значений в списке инициализации, элементам массива присваиваются значения из списка инициализации:
тип[,] имя = newтип [,] { список_инициализаторов };
Пример использования для объявления целочисленного массива:
int[,] c = new int[,] {{1,2,3},{4,5,6}};
Объявлен массив стипа int, состоящий из двух строк и трех столбцов. Операторnewопущен, но по умолчанию он подразумевается, размерность массива определяется списком инициализаторов, элементам массива присваиваются значения из списка инициализации:
тип[,] имя = { список_инициализаторов };
Пример использования для объявления целочисленного массива:
int[,] с = {{1,2,3},{4,5,6}};
Избыточное описание – размерность определяется явно и через список инициализации. Необходимо следить, чтобы полученные двумя путями значения размерностей не конфликтовали между собой.
тип[,] имя = newтип [ разм1, разм2]{ список_инициализации};
Пример использования для объявления целочисленного массива:
int[,] d = new int[2,3]] {{1,2,3),{4,5,6}}
Если список инициализации не задан, размерности могут быть не только константами, но и выражениями типа, приводимого к целому. К элементу двумерного массива обращаются, указывая индексы строки и столбца, на пересечении которых он расположен, например:
а[1,4] b[i, j] b[j, i]
Необходимо помнить, что компилятор воспринимает первый индекс как номер строки, второй индекс всегда – индекс столбца, независимо от того, как они ни были обозначены в программе.