Массив - это формальное объединение нескольких однотипных объектов, рассматриваемое как единое целое. Типом массива может быть любой из доступных системных типов. Если тип массива не указан, то устанавливается тип Variant, при этом в массиве могут храниться значения различных типов.
Определить переменную как массив можно непосредственно при описании этой переменной без предварительного описания типа массива.
Var
myArray: Array; // Массив типа Variant
Размер массива может быть задан на стадии описания переменной (статический массив) или на стадии инициализации в коде приложения (динамический массив). Массивы состоящие из одного измерения называются одномерными; массивы с двумя и более измерениями - многомерными. Если при определении количества элементов в измерении массива используется одно число (без символов «..»), то длина измерения массива устанавливается от 0 до указанного значения. Размерность массива определяется декартовым произведением элементов в каждом измерении массива.
Const // Диапазон массивов
Min = -10;
Max = 10;
Var
a: Array[Min..Max] Of Double; //
Одномерный массив с явным определением типа массива
b: Array[Min..Max, Min..Max]; // Двумерный массив без явного определения типа массива (по умолчанию - Variant)
c: Array[5, 5]; //Двумерный массив с пятью
элементами в каждом измерении. Индексация элементов в диапазоне
0..4
Var
myArray: Array Of Integer; // Определение типа данных в массиве
myArray1: Variant; // Определение переменной, в которой будет содержаться массив
Begin
//...
myArray := New Integer[10, 10]; // Создание массива и определение его размерности
myArray1 := New Double[100]; // Создание массива и определение его размерности
//...
Для обращения к элементам массива используется конструкция следующего вида myArray[<индекс> {, <индекс>}]. Указываемое значение должно соответствовать типу массива.
Var
a: Array[5] Of Integer;
b: Array Of Double;
Begin
a[0] := 100; // Присвоение значения элементу массива
b := New Double[5, 5];
b[0, 0] := Double.MinValue; // Присвоение значения элементу массива
Значения для элементов могут быть указаны как на стадии инициализации массива, так и во время выполнения кода. Для указания значений при инициализации массива после типа укажите символ «=», далее в квадратных скобках через запятую укажите значения в соответствии с типом и размерностью массива:
Var
arr1: Array;
arr2: Array[2, 2] Of Integer = [[11, 12], [21, 22]];
arr3: Array[3] Of String = ["A", 'B', #192]; // #192 - русская буква А
Begin
// Значения элементов в массивах arr2 и arr3 до изменения
Debug.WriteLine("---До преобразований---");
Debug.WriteLine(arr2[0, 0]);
Debug.WriteLine(arr3[2]);
// Изменение значений элементов массивов
arr2[0, 0] := 101;
arr3[2] := "C";
arr1 := New Variant[2];
arr1[0] := arr2;
arr1[1] := arr3;
// Значения элементов в массивах arr2 и arr3 после изменения и сохранения в массив arr1
Debug.WriteLine("---После преобразований---");
Debug.WriteLine((arr1[0] As Array Of Integer)[0, 0]);
Debug.WriteLine((arr1[1] As Array Of String)[2]);
Массив, имеющий с другим массивом одинаковый размер и совместимый тип, может быть указан для этого массива в качестве значения путём обычного присвоения. При этом значения будут скопированы из одного массива в другой.
Массив меньшей размерности может выступать в качестве значения по одному из измерений массива с большей размерностью. При этом должно соблюдаться условие совпадения размера меньшего массива и размера измерения большего массива. Для выполнения установки такого значения в конструкции координаты ячейки пропускается индекс элемента по тому измерению, по которому осуществляется присвоение. Остальные координаты ячейки определяют область вставки. Если измерение, по которому осуществляется вставка, расположено в середине
Var
arrD1: Array[3] Of Double = [1, 2, 3];
arrD2: Array[3] Of Double;
arrD3: Array[3, 5] Of Double = [
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5]]; // В массиве заполнены только 2 ряда ячеек. Третий ряд имеет нулевые значения
arrD4: Array[5] Of Double = [6, 6, 6, 6, 6]; // Массив, который будет выступать в качестве значений третьего ряда массива arrD3
arrD5: Array[3] Of Double = [9, 9, 9]; // Массив, который будет выступать в качестве значений первого столбца массива arrD3
Begin
// Установка одного массива в качестве значения другого массива
arrD2 := arrD1;
arrD2[0] := 4;
Debug.WriteLine(arrD1[0]);
Debug.WriteLine(arrD2[0]);
// Установка меньшего массива в качестве значения по измерению большего массива
arrD3[2, ] := arrD4; // Если измерение последнее в списке, то запятую можно не указывать
arrD3[, 0] := arrD5;
Таким образом в массив arrD2 будут скопированы элементы из массива arrD1 и заменён первый элемент, массив будет иметь вид: 4, 2, 3.
Массив arrD4 будет вставлен в качестве значения по строке в массив arrD3. При этом массив arrD3, имевший вид:
[[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[0, 0, 0, 0, 0]]
примет вид:
[[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[6, 6, 6, 6, 6]]
А массив arrD5 будет вставлен в качестве значения по столбцу в массив arrD3. При этом массив arrD3, примет вид:
[[9, 2, 3, 4, 5],
[9, 2, 3, 4, 5],
[9, 6, 6, 6, 6]]
Как и любой тип данных, массивы могут создаваться и храниться в переменных типа Variant. Для работы с элементами необходимо получить массив с помощью операции As с указанием типа массива. Также класс Array предоставляет два метода для преобразования массивов типа Variant в массивы простых типов и обратно: Array.ToSimpleArray и Array.ToVariantArray.
Var
v: Variant;
d: Array Of Double;
Begin
v := New Double[3]; // Создание нового массива в переменной типа Variant
d := v As Array Of Double; // Доступ к элементам массива
d[0] := 1;
d[1] := 2;
d[2] := 3;
v := d; //
Переприсвоение для изменения исходной переменной
Примечание.
Если в тексте программы происходит повторное переопределение динамического
массива, то все данные, которые были до пересоздания, теряются.
При присвоении массивов осуществляется копирование данных. Для корректного
копирования размеры и типы массивов должны совпадать.
Тип данных Variant можно также использовать для создания статического массива, в котором требуется хранить данные разных типов. Для этого на стадии описания массива необходимо явным образом указать его элементы:
Var
// Определение массива типа Variant
data: array[7] Of Variant = [1, True, 't', 9223372036854775807, "про", 1.123m, 1.123E5];
В массиве типа Variant доступно хранение данных следующих типов: Boolean, Char, Decimal, Double, Integer, String, Int64.
См. также: