Выбирайте коллекцию по вопросу, который задаёте данным. Array<T> сохраняет
позиции, Map<K, V> связывает уникальные ключи со значениями, а Set<T>
хранит уникальные элементы. Их методы следуют этим задачам, а не случайному
поведению контейнера целевой платформы.
Выберите операцию по задаче
| Задача | Что предпочесть | Результат и риск |
|---|---|---|
| Прочитать позицию массива, которой может не быть | items.get(index) | Option<T>; отсутствие не вызывает ошибку выполнения |
| Потребовать позицию как инвариант программы | 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, Map и Set вместе
let tasks = ["draft", "check", "ship"]
let selected = tasks.get(1)
let mut scores: Map<string, int> = Map.new()
scores.insert("ada", 10)
scores.insert("lin", 12)
let mut labels = Set.of("docs")
labels.add("tests")
print("{selected}:{scores.get("lin")}:{scores.keys}:{labels.toArray()}")Some(check):Some(12):[ada, lin]:[docs, tests]Оба поиска возвращают Some, поскольку отсутствие является обычным исходом.
scores.keys и labels.toArray() сохраняют порядок вставки. Последующие
изменения scores или labels не меняют уже полученный снимок.
Безопасное чтение, изменение и ошибки выполнения
Методы Array get, indexOf, pop и removeAt возвращают Option. pop и
removeAt также изменяют массив, поэтому корневая привязка должна быть
let mut. slice ограничивает полуоткрытый диапазон границами и возвращает
новый массив. Прямое индексирование и неверная позиция insert нарушают
контракт и вызывают ошибку выполнения.
У Map методы get и remove возвращают Option, а containsKey — bool.
insert, clear и update изменяют Map. mapValues и filter возвращают
новые Map с сохранением порядка оставшихся ключей.
У Set методы contains и remove возвращают bool. add, remove и clear
изменяют Set. union, intersection и difference возвращают новые
множества в документированном порядке.
Основные операции Array, Map и Set не возвращают Result. Восстановимая
внешняя ошибка принадлежит парсеру, декодеру, файлу или другой операции,
которая создала значение. Обработайте или передайте её Result до работы с
коллекцией.
Частая ошибка: x in map не проверяет ключ. Используйте
map.containsKey(x) или x in map.keys. Строка не является массивом и не
имеет .length; число скаляров даёт text.scalars().length.
Точные границы
- Ключи Map и элементы Set должны быть рекурсивно допустимыми ключами; неверный тип отклоняется статически.
- Изменение через неизменяемую привязку даёт статическую диагностику.
- Обновление существующего значения Map сохраняет позицию; удаление и новая вставка перемещают ключ в конец.
- Методы не добавляют Map и Set общего равенства.
- Функции обратного вызова исполняются в заданном порядке обхода коллекции.
Продолжите с коллекций и включений, Null, Option, Result и ошибки или обзора стандартной библиотеки.