В этой статье:

Наполнение данными

Присвоение массивов

Массивы и Variant

Массивы

Массив - это формальное объединение нескольких однотипных объектов, рассматриваемое как единое целое. Типом массива может быть любой из доступных системных типов. Если тип массива не указан, то устанавливается тип 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[55]; //Двумерный массив с пятью элементами в каждом измерении. Индексация элементов в диапазоне 0..4

Var
    myArray: Array Of Integer; // Определение типа данных в массиве
    myArray1: Variant; // Определение переменной, в которой будет содержаться массив
Begin
    //...
    myArray := New Integer[1010]; // Создание массива и определение его размерности
    myArray1 := New Double[100]; // Создание массива и определение его размерности
    //...

Наполнение данными

Для обращения к элементам массива используется конструкция следующего вида myArray[<индекс> {, <индекс>}]. Указываемое значение должно соответствовать типу массива.

Var
    a: Array[
5Of Integer;
    b: Array 
Of Double;
Begin
    a[
0] := 100// Присвоение значения элементу массива
    b := New Double[55];
    b[
00] := Double.MinValue; // Присвоение значения элементу массива

Значения для элементов могут быть указаны как на стадии инициализации массива, так и во время выполнения кода. Для указания значений при инициализации массива после типа укажите символ «=», далее в квадратных скобках через запятую укажите значения в соответствии с типом и размерностью массива:

Var
    arr1: Array;
    arr2: Array[22Of Integer = [[1112], [2122]];
    arr3: Array[3Of String = ["A"'B', #192]; // #192 - русская буква А
Begin
    // Значения элементов в массивах arr2 и arr3 до изменения
    Debug.WriteLine("---До преобразований---");
    Debug.WriteLine(arr2[00]);
    Debug.WriteLine(arr3[2]);
    // Изменение значений элементов массивов
    arr2[00] := 101;
    arr3[2] := "C";
    arr1 := New Variant[2];
    arr1[0] := arr2;
    arr1[1] := arr3;
    // Значения элементов в массивах arr2 и arr3 после изменения и сохранения в массив arr1
    Debug.WriteLine("---После преобразований---");
    Debug.WriteLine((arr1[0As Array Of Integer)[00]);
    Debug.WriteLine((arr1[1As Array Of String)[2]);

Присвоение массивов

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

Массив меньшей размерности может выступать в качестве значения по одному из измерений массива с большей размерностью. При этом должно соблюдаться условие совпадения размера меньшего массива и размера измерения большего массива. Для выполнения установки такого значения в конструкции координаты ячейки пропускается индекс элемента по тому измерению, по которому осуществляется присвоение. Остальные координаты ячейки определяют область вставки.

Если массив динамический и измерение, по которому осуществляется вставка, является последним, то укажите запятую перед пропускаемым последним индексом. Если присвоение осуществляется для статического массива в блоке Var, то запятая перед последним индексом может не указываться.

Var
    arrD1: Array[3Of Double = [123];
    arrD2: Array[3Of Double;
    arrD3: Array[35Of Double = [
    [12345],
    [12345]]; // В массиве заполнены только 2 ряда ячеек. Третий ряд имеет нулевые значения
    arrD4: Array[5Of Double = [66666]; // Массив, который будет выступать в качестве значений третьего ряда массива arrD3
    arrD5: Array[3Of Double = [999]; // Массив, который будет выступать в качестве значений первого столбца массива 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

Как и любой тип данных, массивы могут создаваться и храниться в переменных типа 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[7Of Variant = [1True't'9223372036854775807"про"1.123m1.123E5];

В массиве типа Variant доступно хранение данных следующих типов: Boolean, Char, Decimal, Double, Integer, String, Int64.

См. также:

Руководство по языку Fore