Массивы
 
Многомерные контейнерные типы.

Описание

Массивы специальные виды  переменных , которые действуют в качестве контейнеров для ряда значений, или элементов. Массив может хранить элементы любого типа, но все его элементы должны иметь один и тот же тип. Например, массив может хранить элементы Integer или Single , но не оба сразу. Эти элементы доступны - для чтения или записи, и доступ к ним можно получить через индекс, который должен быть Integer значением. Массивы имеют длины или размеры, которые равны числу элементов, хранящихся в них в любой момент времени. Фиксированной длины массивы имеют постоянные размеры на протяжении всей их жизни, в то время как размеры переменной длины массивов могут динамически изменяться.

Элементы и позиции

Значения , хранящиеся в массиве, называют элементами. Каждый элемент массива имеет соответствующее положение, которое является Integer значением, начиная от нижней границы массива до его верхней границы включительно. Эти позиции используются для доступа к отдельным элементам массива с помощью оператора (), который принимает позицию и возвращает ссылку на элемент в этой позиции. Допустимое положение в массиве больше или равно его нижней границе, и меньше или равно его верхней границе.

' Создаем массив из 3 элементов, все значение равны нулю (0.0f).
Dim array(1 To 3) As Single

' Присваиваем значение первому элементу.
array(1) = 1.2

' Выводим значения всех элементов ("1.2 0 0").
For position As Integer = 1 To 3
    Print array(position)
Next


Размеры и границы

Размер массива равен числу элементов, которые он хранит в любой момент времени. Массив может иметь размер, равный нулю (0), то есть он не хранит значения в данный момент (пустой). Если размер массива больше нуля, то это означает, что он хранит несколько элементов. Размер массива на единицу больше разницы между его верхней и нижней границей: UBound(array) - LBound(array) + 1.

Нижние и верхние границы не только определяют размер массива, но и возможные позиции отдельных элементов. Например, массив с нижней и верхней границами ноль(0) и четыре(4) хранит пять(5) элементов. Первый элемент в позиции 0, последний в позиции 4. Эти границы могут быть определены, когда объявлен массив, или для динамических массивов могут быть изменены в любое время. Нижнюю и верхнюю границы массива можно получить с помощью LBound and UBound, соответственно.

При создании или изменении размера массива, если нижняя граница не указана, то по умолчанию она равно нулю (0).

' Объявляем и инициализируем массив из четырех элементов с типом Integer.
Dim array(3) As Integer = { 10, 20, 30, 40 }

' Выводим все значения элементов (" 10 20 30 40").
For position As Integer = LBound(array) To UBound(array)
    Print array(position) ;
Next


Фиксированная длина и переменная длина

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

Поскольку массивы фиксированной длины никогда не изменяются в размере, компилятор выбирает память для массива элементов в статических хранилищах или в стеке программы, в зависимости от класса хранения массива. Поскольку массивы фиксированной длины никогда не изменяются в размере, компилятор выбирает память для массива элементов в статических хранилищах или в стеке программы, в зависимости от класса хранения массива. Это может быть где-то преимуществом, так как создание происходит без лишних затрат. Массивы фиксированной длины объявляются с помощью Extern, Static и Dim. По крайней мере верхний предел должен быть указан, и все границы должны быть указаны постоянными значениями , такими как: числовые литералы, Const переменные или Enum перечислителями.

Переменной длины массивы могут изменяться в размерах, так что компилятор выбирает память для элементов массива во время выполнения в свободном хранилище. Преимущество здесь, конечно, в состоянии динамически изменять размер массивов, однако, производительность во время выполнения может варьироваться при их создании, изменении размера или уничтожении. Массивы переменной длины объявляются с помощью Extern, Static, Dim и ReDim. При использовании Extern, Static или Dim, нижнюю и верхнюю границы можно не указывать - в результате создается пустой массив. Так же можно использовать переменную Integer или результат Function для указания размера массива. ReDim можно использовать для увеличения размера существующего массива переменной длины, придав ему различные нижние и/или верхние границы.

' Создаем массив фиксированной длины, содержащий 5 отдельных элементов.
Const totalSingles = 5
Dim flarray(1 To totalSingles) As Single

' Создаем пустой массив переменной длины, содержащий целые значения.
Dim vlarray() As Integer

' Изменяем размер массива до 10 элементов.
ReDim vlarray(1 To 10) As Integer


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

Массивы, обсуждавшиеся выше, были одномерными, то есть, элементы доступны с помощью одной позиции. Одномерные массивы можно рассматривать как ряд простых элементов. Но массивы могут иметь более чем одно измерение; для доступа к отдельному элементу таких массивов нужно две или более позиции. Двумерные массивы используют две позиции - строки и столбцы для обозначения отдельных элементов (их можно представить как сетки или таблицы). Трехмерные массивы используют три позиции - строки, столбцы и возможно глубину для обозначения отдельных элементов (можно представить как куб). Четырехмерные массивы можно рассматривать как один или несколько трехмерных массивов и так далее. Многомерные массивы объявляются так же, как одномерные массивы, за исключением того, что в них больше нижних и верхних границ диапазона.

' Создаем многомерный массив с инициализацией
Dim As Integer multidim(1 To 2,1 To 5) = {{0,0,0,0,0},{0,0,0,0,0}}


См. также