Массивы
Массив хранит последовательность элементов одного типа и обеспечивает быстрый доступ к элементам по индексу.
Создание динамического массива
Динамический массив имеет тип array of. Массив заданной длины создаётся с помощью new.
begin
var n := 5;
var a: array of integer := new integer[n];
a.Println;
end.
Результат:
0 0 0 0 0
Массив с начальными значениями
Массив можно создать, сразу перечислив его элементы в квадратных скобках.
begin
var a := [3, 8, 1, 6, 4];
a.Println;
end.
Результат:
3 8 1 6 4
Длина массива
Свойство Length содержит количество элементов массива.
begin
var a := [10, 20, 30, 40];
Println(a.Length);
end.
Результат:
4
Доступ по индексу и изменение элемента
К элементу массива можно обратиться по индексу и изменить его значение. Нумерация элементов начинается с нуля.
begin
var a := [10, 20, 30, 40];
Println(a[0]);
a[2] := 100;
Println(a);
end.
Результат:
10
[10,20,100,40]
Доступ по индексу с конца
Индекс ^1 обозначает последний элемент массива, ^2 — предпоследний, и так далее.
begin
var a := [10, 20, 30, 40];
Println(a[^1]);
a[^2] := 100;
Println(a);
end.
Результат:
40
[10,20,100,40]
Заполнение массива одинаковыми значениями
ArrFill создаёт массив заданной длины и заполняет его одинаковыми значениями.
begin
var a := ArrFill(10, 0);
Println(a);
end.
Результат:
[0,0,0,0,0,0,0,0,0,0]
Тот же массив можно создать, используя операцию умножения массива на число:
begin
var a := [0] * 10;
Println(a);
end.
Результат:
[0,0,0,0,0,0,0,0,0,0]
Сложение массивов
Операция + объединяет два массива в один.
begin
var a := [1, 2, 3];
var b := [4, 5, 6];
var c := a + b;
Println(c);
end.
Результат:
[1,2,3,4,5,6]
Массивы строк и кортежей
Массив может содержать элементы любого одного типа, например строки или кортежи.
begin
var names := ['Анна', 'Борис', 'Вера']; // array of string
var people
:= [('Анна', 20), ('Борис', 18), ('Вера', 21)]; // array of (string,integer)
Println(names);
Println(people);
end.
Результат:
[Анна,Борис,Вера]
[(Анна,20),(Борис,18),(Вера,21)]
Изменение элементов в цикле for
Цикл for удобно использовать, когда нужен индекс элемента или требуется изменять элементы массива по индексам.
begin
var a := [1, 2, 3, 4, 5];
for var i := 0 to a.Length - 1 do
a[i] *= 2;
a.Println;
end.
Результат:
2 4 6 8 10
Перебор массива
Цикл foreach используется для последовательного перебора всех элементов массива.
begin
var a := [3, 8, 1, 6];
foreach var x in a do
Print(x);
end.
Результат:
3 8 1 6
Сумма, минимум и максимум
Методы Sum, Min и Max позволяют вычислить сумму, минимальный и максимальный элементы числового массива.
begin
var a := [7, 2, 9, 4, 5];
Println(a.Sum);
Println(a.Min);
Println(a.Max);
end.
Результат:
27
2
9
Сортировка массива
Процедура Sort сортирует массив по возрастанию, а SortDescending — по убыванию.
begin
var a := [7, 2, 9, 4, 5];
Sort(a);
Println(a);
SortDescending(a);
Println(a);
end.
Результат:
[2,4,5,7,9]
[9,7,5,4,2]
Копирование массива
При обычном присваивании две переменные ссылаются на один и тот же массив. Copy создаёт независимую копию массива.
begin
var a := [10, 20, 30];
var b := Copy(a);
b[0] := 100;
Println(a);
Println(b);
end.
Результат:
[10,20,30]
[100,20,30]
Сравнение массивов
Метод ArrEqual проверяет, содержат ли два массива одинаковые элементы в одинаковом порядке.
begin
var a := [1, 2, 3];
var b := [1, 2, 3];
var c := [1, 3, 2];
Println(a.ArrEqual(b));
Println(a.ArrEqual(c));
end.
Результат:
True
False
Поиск элемента
Операция in позволяет проверить, содержится ли элемент в массиве, а IndexOf возвращает индекс первого найденного элемента или -1, если такого элемента нет.
begin
var a := [3, 8, 1, 6, 4];
Println(6 in a);
Println(10 in a);
Println(a.IndexOf(6));
Println(a.IndexOf(10));
end.
Результат:
True
False
3
-1
Срез массива
Срез позволяет получить новый массив, содержащий часть элементов исходного массива.
begin
var a := [10, 20, 30, 40, 50, 60];
var b := a[1:4];
b.Println;
end.
Результат:
20 30 40
Срез с шагом
В срезе можно указать шаг выбора элементов.
begin
var a := [10, 20, 30, 40, 50, 60];
a[::2].Print;
end.
Результат:
10 30 50
Срез с отрицательным шагом
Отрицательный шаг позволяет выбирать элементы в обратном порядке.
begin
var a := [10, 20, 30, 40, 50, 60];
a[::-1].Print;
end.
Результат:
60 50 40 30 20 10
Создание массива из диапазона
Функция Arr создаёт массив из целочисленного диапазона.
begin
var a := Arr(1..10);
a.Println;
end.
Результат:
1 2 3 4 5 6 7 8 9 10
Массив случайных чисел
ArrRandomInteger создаёт массив заданной длины и заполняет его случайными целыми числами из указанного диапазона.
begin
var a := ArrRandomInteger(10, 1, 9);
a.Println;
end.
Результат зависит от случайной генерации.