Массив — это структура данных для хранения некоторого набора значений. Элементы массива могут быть как одного, так и различных типов. Доступ к каждому элементу осуществляется по его индексу.
Размер массива
Любой массив имеет определенный размер, который определяется количеством элементов массива. Размер массива может изменяться динамически, например при добавлении или удалении элементов. Используйте метод Размер(), чтобы определить текущий размер массива.
Изменяемые и неизменяемые массивы
Массивы делятся на два вида:
- В фиксированном массиве нельзя изменять значения элементов или размер самого массива. Для описания неизменяемого массива в языке используется тип
ЧитаемыйМассив<ТипЭлемента>.
- В изменяемом массиве возможно как изменение любого элемента, так и изменение параметров самого массива. Изменяемый массив мы будем называть обычным массивом, или просто массивом. Для описания изменяемого массива в язык е используется тип
Массив<ТипЭлемента>.
Создание массива
Создание массива выполняется следующим способом:
пер ПустойМассив = новый Массив<Число>()
пер МассивЧисел = [1, 2, 3]
пер МассивКопия = новый Массив<Число>(МассивЧисел)
пер МассивСтрок = новый Массив<Строка>()
МассивСтрок.Добавить("Первая строка")
Масс ивСтрок.Добавить("Третья строка")
МассивСтрок.Вставить(Индекс = 1, Элемент = "Вторая строка")
пер Коэффициенты: Массив<Число>
Коэффициенты = [1, 2, 3]
Все созданные выше массивы являются изменяемыми и могут быть заполнены необходимыми данными. При создании массива копированием в новый массив переносятся все элементы массива-источника.
Создание фиксированного массива выполняется аналогичным образом:
знч ЧитаемыйМассивЧисел: ЧитаемыйМассив<Число> = [1, 2, 3]
знч ЧитаемыйМассивКонстант = новый ЧитаемыйМассив<Число>([3.141592654, 2.718281828])
Элементами массива могут быть значения произвольных типов. В примере ниже показано создание массива, элементами которого являются массивы чисел.
пер Матрица1 = <Массив<Число>>[<Число>[1, 2, 3], <Число>[4, 5, 6]]
пер Матрица2: Массив<Массив<Число>>
Матрица2.Добавить(новый Массив<Число>([1, 2, 3]))
Матрица2.Добавить(новый Массив<Число>([4, 5, 6]))
Во всех вышеприведенных примерах создается переменная, которая хранит ссылку на массив значений. Однако вы можете использовать массив, не объявляя для этого отдельную переменную. Для этого используйте литерал вида [элемент0, ..., элементN]:
метод ВычислитьСуммуИСреднее(): Строка
пер Сумма = 0
для Число из [10, 20, 30, 40, 50]
Сумма += Число
;
знч Среднее = [10, 20, 30, 40, 50].Среднее()
возврат "Сумма = $Сумма, среднее = $Среднее"
;
Доступ к элементам массива
Для обращения к элементу массива используется индекс. Индекс массива является целым числом в диапазоне от 0 до 231–1. Массив из N элементов индексируется от 0 до N–1, где 0 — это индекс первого элемента в массиве. Обращение по индексу за границей массива приведет к исключению ИсключениеИндексВнеГраниц. Ошибка также возникнет, если в качестве индекса указать дробное число.
Для обращения к элементам массива можно использовать следующие способы:
-
Операция доступа по индексу
В этом случае индекс требуемого элемента массива нужно указать внутри квадратных скобок []. Например, обращение к пятому элементу массива Коэффициенты будет выглядеть следующим образом: Коэффициенты[4].
-
Функциональный способ
В этом случае индекс нужного элемента массива нужно указать в качестве параметра метода Получить(). Например, обращение к пятому элементу массив а Коэффициенты будет выглядеть следующим образом: Коэффициенты.Получить(4).
знч МассивЧисел = [1, 2, 3]
знч ДоступПоИндексу = МассивЧисел[0]
знч ФункциональныйСпособ = МассивЧисел.Получить(1)
Обход массива
Вы можете использовать циклы для по, для из и пока для обхода элементов массива, как показано в примерах ниже.
При обходе массива не допускается изменение его состава. При попытке такого изменения будет выброшено исключение.
Обход массива с помощью цикла «для по»
метод ОбходМассива(МассивЧисел: Массив<Число>)
пер ТекущийЭлемент: Число
для Индекс = 0 по МассивЧисел.Граница()
ТекущийЭлемент = МассивЧисел[Индекс]
;
;
Обход массива с помощью цикла «для из»
метод ОбходМассива(МассивЧисел: Массив<Число>)
пер ТекущийЭлемент: Число
для Число из МассивЧисел
ТекущийЭлемент = Число
;
;
Обход массива с помощью цикла «пока»
метод ОбходМассива(МассивЧисел: Массив<Число>)
пер ТекущийЭлемент: Число
пер Индекс = 0
пока Индекс <= МассивЧисел.Граница()
ТекущийЭлемент = МассивЧисел[Индекс]
Индекс += 1
;
;
Массив как параметр метода
Если массив используется как параметр метода, в качестве типа параметра следует использовать тип ЧитаемыйМассив<ТипЭлемента>. В этом случае в метод можно передать как фиксированный, так и обычный массив. Это возможно потому, что тип Массив<ТипЭлемента> является потомком типа ЧитаемыйМассив<ТипЭлемента>.
метод ВычислитьСумму(МассивЧисел: ЧитаемыйМассив<Число>): Число
пер Сумма = 0
для Число из МассивЧисел
Сумма += Число
;
возврат Сумма
;
метод ВыполнитьВычисления()
знч МассивЧисел = [1, 2, 3, 4, 5]
знч Сумма1= ВычислитьСумму(МассивЧисел)
знч ЧитаемыйМассивЧисел: ЧитаемыйМассив<Число> = [10, 20, 30, 40, 50]
знч Сумма2= ВычислитьСумму(ЧитаемыйМа ссивЧисел)
;
Если в методе ВычислитьСумму() изменить тип параметра на Массив<ТипЭлемента>, то попытка передать в метод фиксированный массив в качестве аргумента приведет к ошибке компиляции из-за несовпадения типов.
Сравнение массивов
Поддерживается сравнение массивов на равенство или неравенство. Два массива являются равными, если они имеют одинаковый размер и содержат одинаковые элементы в одинаковом порядке, то есть каждый элемент с определенным индексом в первом массиве должен быть равен соответствующему элементу с тем же индексом во втором массиве. Если элемент массива является другим массивом, выполняется попытка рекурсивного сравнения.
метод СравнитьМассивы()
знч МассивЧисел1 = [1, 2, 3]
знч МассивЧисел2 = [3, 2, 1]
знч МассивЧисел3: ЧитаемыйМас сив<Число> = [1, 2, 3]
знч Равны1 = МассивЧисел1 == МассивЧисел2
знч Равны2 = МассивЧисел1 == МассивЧисел3
знч Равны3 = МассивЧисел2 == МассивЧисел3
;