aboutsummaryrefslogtreecommitdiffstats
path: root/yql/essentials/docs/ru/types/containers.md
blob: 9832aa0241d41bb8df4074d8765dd874951e7f02 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# Контейнеры

YQL поддерживает контейнерные типы для определения сложных структур данных различной организации.
Значения контейнерных типов могут быть переданы в запросы YQL в качестве входных параметров, либо возвращены из запросов YQL в качестве выходных колонок набора результатов.

| Тип | Объявление,<br/>пример | Описание |
| ------------ | ---------------- | ------------- |
| Список | `List<Type>`,<br/>`List<Int32>` | Последовательность переменной длины, состоящая из элементов одного типа.|
| Словарь | `Dict<KeyType, ValueType>`,<br/>`Dict<String,Int32>` | Набор пар ключ—значение с фиксированным типом ключей и значений. |
| Множество | `Set<KeyType>`,<br/>`Set<String>` | Набор элементов с фиксированным типом, является частным случаем словаря с типом значения `Void`. |
| Кортеж | `Tuple<Type1, ..., TypeN>`,<br/>`Tuple<Int32,Double>` | Набор безымянных элементов фиксированной длины с указанными типами всех элементов. |
| Структура | `Struct<Name1:Type1, ..., NameN:TypeN>`,<br/> `Struct<Name:String,Age:Int32>` | Набор именованных полей с указанными типами значений, фиксированный на момент начала запроса (то есть обязательно не зависящий от данных). |
| Поток | `Stream<Type>`,<br/> `Stream<Int32>` | Однопроходной итератор по значениям одного типа. Не является сериализуемым. |
| Вариант над кортежем | `Variant<Type1, Type2>`,<br/> `Variant<Int32,String>` | Кортеж, про который известно, что заполнен ровно один элемент. |
| Вариант над структурой | `Variant<Name1:Type1, Name2:Type2>`,<br/>`Variant<value:Int32,error:String>` | Структура, про которую известно, что заполнен ровно один элемент. |
| Перечисление | `Enum<Name1, Name2>`,<br/>`Enum<value,error>` | Контейнер, в котором выбран ровно один элемент перечисления, который определяется только своим именем. |

При необходимости контейнеры можно вкладывать друг в друга в произвольных комбинациях, например `List<Tuple<Int32,Int32>>`.

[Опциональные значения](optional.md) в некоторых контекстах также могут рассматриваться как один из видов контейнеров (`Optional<Type>`), который ведёт себя как список длины 0 или 1.

Для создания литералов контейнеров списка, словаря, множества, кортежа, структуры можно использовать [операторную запись](../builtins/basic.md#containerliteral).
Для создания литерала варианта над кортежем или структурой используется функция [Variant](../builtins/basic.md#variant).
Для создания литерала перечисления используется функция [Enum](../builtins/basic.md#enum).

Для обращения к элементам контейнера используется [точка или квадратные скобки](../syntax/expressions.md#items-access), в зависимости от его типа.