--- url: /reference/collections.md description: >- Списки, диапазоны и карты в шаблонах Astral Moderation — методы добавления, удаления и поиска. --- # List, Map, Range

Коллекции — несколько значений в одной переменной. Список хранит значения по порядку, карта — пары «ключ → значение», диапазон — последовательность целых чисел.

## List — список { #list } ```template {% set modes = ['Броулбол', 'Нокаут'] %} {% do modes.add('Ограбление') %} {{ modes[0] }} {# Броулбол #} ``` Номера элементов начинаются с 0. В списке — до 250 элементов. Менять можно только списки, созданные в шаблоне; списки из данных бота (`club.members`, `member.roles`) — только читать. | Метод | Возвращает | Описание | |---|---|---| | `add(x)` | Логический | Добавить в конец | | `addIfAbsent(x)` | Логический | Добавить, если такого еще нет | | `addAll(список)` | Логический | Добавить все элементы другого списка | | `replace(i, x)` | Прежнее значение | Заменить элемент номер `i` | | `remove(x)` | Логический | Удалить первое вхождение `x` | | `removeAll(список)` | Логический | Удалить все вхождения элементов списка | | `removeAt(i)` | Удаленный элемент | Удалить элемент номер `i` | | `contains(x)` | Логический | Есть ли элемент | | `containsAll(список)`, `containsAny(список)` | Логический | Есть ли все или хотя бы один | | `indexOf(x)` | Число | Номер элемента или −1 | | `countOf(x)` | Число | Сколько раз встречается | | `clear()` | — | Очистить | ::: warning Без автоконвертации В методах списков типы сравниваются строго: `['1', '2'].contains(1)` — `false`, потому что в списке строки. ::: ## Range — диапазон { #range } ```template {% for i in [1..5] %}{{ i }} {% endfor %} {# 1 2 3 4 5 #} {% for i in [5..1] %}{{ i }} {% endfor %} {# 5 4 3 2 1 #} ``` Диапазон включает оба конца. Изменять его нельзя — нужен изменяемый список, создайте его: `{% set list = [] %}{% do list.addAll([1..5]) %}`. ## Map — карта { #map } ```template {% set prices = { vip: 500, premium: 1000 } %} {% do prices.put('legend', 5000) %} {{ prices.vip }} {{ prices['premium'] }} {% for name, price in prices %}{{ name }}: {{ price }} {% endfor %} ``` Ключ без кавычек — строка, а не переменная. В карте — до 250 пар, порядок добавления сохраняется. Менять можно только карты, созданные в шаблоне. | Метод | Описание | |---|---| | `put(k, v)` | Записать значение, вернет прежнее или `null` | | `putAll(карта)` | Записать все пары другой карты | | `putIfAbsent(k, v)` | Записать, если ключа еще нет | | `remove(k)`, `remove(k, v)` | Удалить ключ (или только если значение равно `v`) | | `containsKey(k)`, `containsValue(v)` | Есть ли ключ или значение | | `clear()` | Очистить | ## Функции для коллекций { #functions } `length`, `first`, `last`, `join`, `slice`, `sort`, `sort_by`, `batch`, `keys`, `values`, `reverse`, `shuffle`, `unique` — см. [Функции](/templates/advanced/functions#collections).