Скачиваний:
69
Добавлен:
24.03.2015
Размер:
262.66 Кб
Скачать

7.3. Виды массивов и массивы многомерные

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

Рассмотренные нами одномерные массивы являются частным случаем всего разнообразия массивов, которые можно использовать в С#. Для этих массивов размерность равна 1, а размер одномерного массива определяется числом возможных значений индекса.

В общем случае тип массива объявляется с помощью конструкции:

тип_не_массива спецификаторы_размерностей

тип_не_массива это один из следующих типов:

тип_значения

тип_класса

тип_интерфейса

тип_лелегата

спецификатор размерности - это [] или [разделители__размеров];

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

Спецификаторы размерностей размещаются подряд в нужном количестве после типа_не_массива. Рассмотрим случай, когда спецификатор размерности один. Например:

type[R] - тип одномерного массива с R элементами типа type.

Важными частными случаями типов массивов с одним спецификатором размерности кроме типов одномерных массивов являются "прямоугольные" типы массивов, то есть двумерные (матрицы), трехмерные («параллелепипеды») и т.д. Именно такие массивы традиционно принято называть многомерными массивами. Примеры:

int [,] dots; //ссылка на двумерный массив

byte [„] bits; //ссылка на трёхмерный массив

Для определения объекта - конкретного экземпляра типа многомерных массивов используется выражение с операцией new

new тип_не_массива [d1,d2, из...] инициализатор

Здесь dj - размер - количество элементов по соответствующему измерению. Инициализатор представляет собой вложение конструкций

{список_инициализаторов}.

Элементами такого списка в свою очередь служат заключенные в фигурные скобки списки инициализаторов. Глубина вложения соответствует размерности массива. Размерность массива можно получить с помощью нестатического свойства Rank.

Пример определения с использованием инициализации матрицы (двумерного массива) с размерами 4 на 2:

int [,] matr = new int[4,2] {{1,2},{3,4},{5,6},{7,8}};

Как и для одномерных массивов при наличии инициализатора конструкцию new int[4,2] можно опустить.

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

// 07_05.cs - двумерный массив - единичная матрица

static void Main()

{

int size;

do

Console.Write("size = ");

while (!int.TryParse(Console.ReadLine(), out size) || size < 1);

int[,] one = new int[size, size];

for (int i = 0; i < size; i++, Console.WriteLine())

for (int j = 0; j < size; j++)

{

if (i == j)

one[i,j] = 1;

Console.Write(one[i, j] + "\t");

}

foreach (int mem in one)

Console.Write(mem+" ");

Console.WriteLine();

Console.WriteLine("one.Length = " + one.Length);

Console.WriteLine("one.Rank = " + one.Rank);

}

Результат

выполнения программы:

size

= 4<ENTER>

1

0

0

0

0

1

0

0

0

0

1

0

0

0

0

1

1000010000100001 one.Length = 16 one.Rank = 2

В программе формируется двумерный массив (экземпляр массивов типа [,]), размеры которого определены переменной size. Значение size вводит пользователь. По умолчанию все элементы массива получают нулевое значение. Во вложенных циклах диагональным элементам присвоены единичные значения и выводятся значения всех элементов. Обратите внимание, как в заголовке внешнего цикла for используется обращение к методу Console.WriteLine() для перехода на новую строку при выводе. Далее иллюстрируется применение цикла foreach к многомерному массиву. Перебор значений массива, представляющего матрицу, выполняется по строкам. (Быстрее изменяется правый индекс.)

В конце программы выведено значение свойства one.Length - это общее количество элементов в массиве и значение ранга массива – ранг равен двум.

Соседние файлы в папке Lekc_C#