Доступ к элементам массива

Массивы и кортежи

• Простые массивы

• Многомерные массивы

• Зубчатые массивы

• Класс Array

• Массивы в качестве параметров

• Перечисления

• Кортежи

• Структурное сравнение

 

 

Для работы с множеством объектов одного и того же типа можно использовать коллек­ции (см. раздел 6.10) и массивы. В C# предусмотрена специальная нотация для объявления и использования массивов. Здесь “за кулисами” вступает в действие класс Array, предос­тавляющий несколько методов для сортировки и фильтрации-элементов внутри массива. С помощью перечислителя (enumerator) можно выполнить итерацию по всем элементам массива. Кроме того, в .NET 4 появился новый тип Tuple (кортеж), который может ис­пользоваться для комбинации множества объектов разного типа (см. подраздел “Кортежи” далее в этом разделе).

Простые массивы

При работе с множеством объектов одного и того же типа можно использовать массив. Массив - это структура данных, содержащая множество элементов одного и того же типа.

Объявление массива

Массив объявляется определением типа элементов, содержащихся в нем, за которым следуют квадратные скобки и имя переменной; например, массив, содержащий целочис­ленные элементы, объявляется так:

int[] myArray;

Инициализация массива

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

myArray = new int [ 4 ] ;

После такого объявления и инициализации переменная myArray ссылается на четыре целочисленных значения, распределенные в управляемой куче (рис. 6.1).

После изначальной спецификации размер массива не может быть изменен без копирования всех элементов. Если заранее не известно, сколько элементов долж­но содержаться в массиве, следует использовать коллекцию. Коллекции рассмат­риваются в разделе 6.10.

 

 

Рисунок 6.1 - Переменная myArray ссылается на четыре целочисленных значения в управляемой куче

 

Объявлять и инициализировать массив можно также в одной строке, а не в нескольких: int[] myArray = new int[4];

Присвоить значения каждому элементу массива, можно с помощью инициализатора массива. Инициализаторы массивов могут использоваться прямо в объявлении перемен­ной массива, а не после того, как массив объявлен:

int [] myArray = new int[4] {4, 7, 11, 2 };

Если вы инициализируете массив, применяя фигурные скобки, то размер массива мож­но не указывать, поскольку компилятор определит его самостоятельно:

int[] myArray = new int[] {4, 7, 11, 2};

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

int[] myArray = {4, 7, 11, 2};

Доступ к элементам массива

После того, как массив объявлен и инициализирован, к его элементам можно обра­щаться с использованием индексатора (indexer). Массивы поддерживают только целочис­ленные индексаторы.

Индексатору передается номер элемента для доступа к массиву. Индексатор всегда на­чинается со значения 0 для первого элемента. Самый больший номер, который можно передать индексатору, равен общему количеству элементов в массиве минус 1, поскольку нумерация начинается с нуля. В следующем примере массив myArray объявляется и ини­циализируется четырьмя целыми значениями. К элементам можно обращаться со значе­ниями индексатора 0, 1, 2 и 3.

int[] myArray = new int[] {4, 7, 11, 2};

int vl = myArray[0]; // читать первый элемент

int v2 = myArray[l]; // читать второй элемент

myArray [3] = 44; // изменить четвертый элемент

Если значению индексатора, не соответствует никакого элемента, генерирует­ся исключение типа IndexOutOfRangeException.

Чтобы узнать количество элементов в массиве, можно воспользоваться свойством Length, как показано в приведенном ниже операторе:

for (int i = 0; i < myArray.Length; i++)

{

Console.WriteLine(myArray[i]);

}

Вместо применения оператора for для прохождения по всем элементам массива мож­но также использовать оператор foreach:

foreach (int val in myArray)

{

Console.WriteLine(val);

}

Оператор foreach использует интерфейсы IEnumerable и IEnumerator, о которых речь пойдет дальше в этом разделе.