Перейти к основному содержимому

Коллекции

Коллекция — это тип, который содержит набор значений одного или различных типов и позволяет обращаться к этим значением. По способу хранения данных можно выделить две группы коллекций: списки значений и словари (наборы пар «ключ-значение»).

Базовые типы

В основе иерархии типов, предназначенных для работы с коллекциями, лежит тип Обходимое<ТипЭлемента>.

Далее в иерархии располагаются типы ЧитаемаяКоллекция<ТипЭлемента> и ЧитаемоеСоответствие<ТипКлюча,ТипЗначения>, которые реализуют базовый контракт, необходимый для работы со списком элементов и словарем.

Фиксированные и обычные коллекции

Типы, которые реализуют механизм работы с коллекциями, можно разделить на два вида:

  • фиксированные коллекции — типы, которые не позволяют изменять свой состав;
  • обычные коллекции — типы, которые позволяют изменять свой состав.

Типы для работы с коллекциями

В языке поддерживаются следующие типы для работы с коллекциями:

Методы последовательной обработки коллекций

При выполнении операций над коллекциями вместо циклов и условных операторов для обработки данных можно использовать последовательный вызов цепочки методов. Это позволит ускорить и упростить написание кода.

Методы делятся на последовательные и терминальные. К последовательным методам относятся те, которые могут применяться к потоку данных несколько раз без его завершения. Например, Преобразовать(), Фильтровать(), Сортировать(), ДляКаждого(). К терминальным методам относятся методы, которые применяются к потоку только один раз и возвращают результат. Это такие методы, как ВМассив(), НетСоответствий(), Соединить().

При вызове цепочки последовательных методов они выполняются лениво: только последний метод в цепочке является терминальным.

Примеры последовательного вызова методов

Пример использования метода «СортироватьПо»

Если метод СортироватьПо() используется в цепочке вызовов, после него можно вызвать метод ПотомСортироватьПо(). Тогда сортировка будет выполняться по полям поочередно в соответствующем порядке.

структура Сотрудник
пер Фамилия: Строка
пер Должность: Строка
;

метод СортироватьПоДолжностиИФамилии(): Массив<Сотрудник>
знч СписокСотрудников =
[новый Сотрудник(Фамилия = "Яковлев", Должность = "Менеджер"),
новый Сотрудник(Фамилия = "Смирнов", Должность = "Руководитель"),
новый Сотрудник(Фамилия = "Иванов", Должность = "Менеджер")]

возврат СписокСотрудников.СортироватьПо(Элемент -> Элемент.Должность)
.ПотомСортироватьПо(Элемент -> Элемент.Фамилия)
.ВМассив()
;

В результате выполнения метода вернется массив, содержащий следующие элементы:

[0]: {Фамилия="Иванов", Должность="Менеджер"}
[1]: {Фамилия="Яковлев", Должность="Менеджер"}
[2]: {Фамилия="Смирнов", Должность="Руководитель"}

Пример использования метода «ГруппироватьПо»

структура Сотрудники
пер Фамилия: Строка
пер Отдел: Строка
;

метод СгруппироватьСотрудников(): Последовательность<КлючИЗначение<Строка, Множество<Строка>>>
знч СписокСотрудников =
[новый Сотрудник(Фамилия = "Петров", Отдел = "Разработка"),
новый Сотрудник(Фамилия = "Смирнов", Отдел = "Разработка"),
новый Сотрудник(Фамилия = "Иванов", Отдел = "Тестирование")]

возврат СписокСотрудников.КакПоследовательность()
.ГруппироватьПо(Элемент -> Элемент.Отдел,
Элемент -> Элемент.Фамилия,
() -> новый Множество<Строка>())
;

Метод ГруппироватьПо() вернет последовательность, содержащую следующие элементы:

"Тестирование": {"Иванов"}
"Разработка": {"Петров", "Смирнов"}