Массивы
В этой главе обсуждаются массивы. Функциональность класса массива, категории массивов, синтаксис объявления, инициализация, применение массивов.
Массив. Объявление
Массив – множество однотипных элементов. Это тоже ТИП. Любой массив наследует класс (является производным от класса – о принципе наследования позже) System.Array.
Существует несколько способов создания группировок однотипных объектов:
- объявление множества однотипных элементов в рамках перечисления (класса, структуры),
- определение собственно массива.
Принципиальная разница состоит в следующем:
- доступ к данным - членам перечисления, класса производится ПО имени данного члена (элементы перечисления, класса или структуры ИНОГДА могут быть одного типа, но каждый член всегда имеет собственное имя),
- элементы массива ВСЕГДА однотипны, располагаются в непрерывной области памяти,
- доступ к элементу массива осуществляется по индексу, при этом допускается случайный доступ.
Одной из характеристик массива является ранг или размерность массива. Массив размерности (или ранга) N ( N определяет число измерений массива) – это Массив массивов (или составляющих массива) ранга N–1. Составляющие массива – это массивы меньшей размерности, являющиеся элементами данного массива. При этом составляющая массива сама может быть либо массивом, либо элементом массива:
ОбъявлениеМассива ::= ИмяТипа СписокСпецификаторовРазмерности ИмяМассива [ИнициализацияМассива]; ИмяТипа ::= Идентификатор ИмяМассива ::= Идентификатор СписокСпецификаторовРазмерности ::= [СписокСпецификаторовРазмерности] СпецификаторРазмерности ::= [СписокНеявныхСпецификаторов] СпецификаторРазмерности ::= [] СписокНеявныхСпецификаторов СписокНеявныхСпецификаторов ::= [СписокНеявныхСпецификаторов ,] НеявныйСпецификатор НеявныйСпецификатор ::= ПУСТО | РАЗДЕЛИТЕЛЬЛистинг 5.1.
ПУСТО – оно и есть пусто.
РАЗДЕЛИТЕЛЬ – пробел, несколько пробелов, символ табуляции, символ перехода на новую строку, комбинация символов "новая строка/возврат каретки" и прочая икебана...
При объявлении массива действуют следующие правила:
- Спецификатор размерности, состоящий из одного неявного спецификатора [], специфицирует составляющую массива размерности 1.
- Спецификатор размерности, состоящий из N неявных спецификаторов [ ,,, ... ,], специфицирует составляющую массива размерности N.
- Длина списка спецификаторов размерности массива не ограничена.
При этом информация о типе составляющих массива в объявлении массива определяется на основе типа массива и списка его спецификаторов размерности.
Синтаксис объявления массива (ссылки на массив) позволяет специфицировать массивы произвольной конфигурации без какого-либо намека на количественные характеристики составляющих массивы элементов.
Ниже представлены способы ОБЪЯВЛЕНИЯ ссылок на массивы РАЗЛИЧНОЙ размерности и конфигурации:
// Объявлены ссылки на массивы размерности 3 элементов типа int. // Это массивы составляющих, представляющих собой массивы элементов // размерности 2 одномерных массивов элементов типа int. // Размеры всех составляющих массивов одного уровня равны // между собой (так называемые "прямоугольные" массивы). int[,,] arr0; int[ , , ] arr1; int[ , , ] arr2; // Объявлена ссылка на // ОДНОМЕРНЫЙ(!) массив // ОДНОМЕРНЫХ(!) элементов массива, каждый из которых является // ОДНОМЕРНЫМ(!) массивом элементов типа int. int[][][] arr3; // Объявлена ссылка на // ОДНОМЕРНЫЙ(!) массив составляющих, каждая из которых является // ДВУМЕРНЫМ(!) массивом массивов элементов типа int. // При этом никаких ограничений на размеры "прямоугольных" составляющих // данное объявление не содержит. У всех составляющих могут быть разные // размеры. int[][,] arr4; // Объявлена ссылка на // ДВУМЕРНЫЙ(!) массив составляющих, каждая из которых является // ОДНОМЕРНЫМ(!) массивом элементов типа int. // При этом никаких ограничений на размеры одномерных составляющих // данное объявление не содержит. У всех составляющих могут быть разные // размеры. int[,][] arr5;
Рассмотренный синтаксис объявления и инициализации массива позволяет определять ДВЕ различных категории массивов:
- простые (прямоугольные) массивы,
- jagged (вложенные) массивы.