Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Малыхина. Массивы....doc
Скачиваний:
22
Добавлен:
22.05.2015
Размер:
502.27 Кб
Скачать

Глава 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]

Необходимо помнить, что компилятор воспринимает первый индекс как номер строки, второй индекс всегда – индекс столбца, независимо от того, как они ни были обозначены в программе.