Найдите элемент, сохраните порядок коллекции или измените её содержимое. Используйте Array для доступа по позиции, Map для пар ключ-значение и Set для уникальных элементов.
Установите Топаз по инструкции «Первая программа». Синтаксис описан в разделе «Коллекции и включения».
Используйте Array, Map и Set вместе
Сохраните код в collections.tpz.
let задачи = ["draft", "check", "ship"]
let выбранная = задачи.get(1)
let mut оценки: Map<string, int> = Map.new()
оценки.insert("ada", 10)
оценки.insert("lin", 12)
let mut метки = Set.of("docs")
метки.add("tests")
print("{выбранная}:{оценки.get("lin")}:{оценки.keys}:{метки.toArray()}")В каталоге с файлом выполните topaz run collections.tpz.
Some(check):Some(12):[ada, lin]:[docs, tests]задачи.get(1) находит "check", а оценки.get("lin") находит 12. Оба вызова возвращают Some, потому что искомые значения существуют. Для отсутствующего индекса или ключа возвращается None.
оценки.keys возвращает [ada, lin] в порядке вставки. метки.toArray() так же возвращает [docs, tests]. Эти массивы представляют снимок элементов на момент копирования. Добавление или удаление записей в исходной коллекции не меняет их.
Выберите операцию по задаче
| Задача | Вызов | Результат |
|---|---|---|
| Прочитать позицию массива, которой может не быть | items.get(index) | Option<T>, с None для неверного индекса |
| Прочитать позицию, которая должна существовать | items[index] | T либо ошибка выполнения для неверного индекса |
| Найти ключ Map | values.get(key) | Option<V> |
| Подставить значение при отсутствии ключа | values.getOr(key, default) | V |
| Проверить наличие значения в Set | values.contains(value) | bool |
| Скопировать ключи, значения или записи Map по порядку | keys, values, entries | Снимок в порядке вставки |
| Преобразовать или отсортировать элементы | map, filter, sorted | Новая коллекция |
| Изменить существующую коллекцию | Изменяющий метод у привязки let mut | Изменение исходной коллекции |
Безопасное чтение, изменение и ошибки выполнения
Методы Array get и indexOf возвращают Option. Методы pop и removeAt также возвращают Option, но меняют массив и требуют let mut.
slice(start, end) копирует элементы от start до end, не включая end. Диапазон ограничивается границами массива. Прямое индексирование и неверная позиция в insert вызывают ошибку выполнения (fault). Используйте get, когда отсутствие позиции допустимо.
| Коллекция | Методы, изменяющие её | Методы, возвращающие новую коллекцию |
|---|---|---|
Map | insert, remove, clear, update | mapValues, filter |
Set | add, remove, clear | union, intersection, difference |
Метод Map remove возвращает Option. Метод Map containsKey, а также методы Set contains и remove возвращают bool.
Методы Map mapValues и filter сохраняют порядок оставшихся ключей. Обновление существующего ключа сохраняет его позицию. Удаление и повторная вставка перемещают ключ в конец. Объединение, пересечение и разность Set следуют порядку, установленному для каждой операции.
Эти базовые методы коллекций не возвращают Result. Если чтение файла или парсер возвращает Result, обработайте Ok или Err перед работой с коллекцией.
Исправьте отклонённую операцию
- Для поиска ключа Map используйте
map.containsKey(x)илиx in map.keys. Проверка отклоняетx in map. - Считайте скаляры строки через
text.scalars().length. У строк нет свойства.length. - Если изменяющий метод отклонён для неизменяемой привязки, объявите её через
let mut, когда изменение нужно. - Ключ Map или элемент Set должен иметь тип, допустимый для ключа. Это условие относится и ко всем вложенным значениям и полям. Проверка отклоняет неверные типы.
- У
MapиSetнет общей операции равенства. Методы поиска проверяют отдельные ключи или элементы.
Функции обратного вызова выполняются в установленном порядке обхода коллекции. Обработка отсутствующих значений описана в разделе Null, Option, Result и ошибки. Другие задачи ищите в обзоре стандартной библиотеки.