Выбирайте коллекцию исходя из вопроса, который вы задаёте данным. 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 задачи = ["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()}")Some(check):Some(12):[ada, lin]:[docs, tests]Оба поиска возвращают Some, так как отсутствие значения считается штатным исходом.
оценки.keys и метки.toArray() сохраняют порядок вставки элементов. Последующие
изменения оценки или метки не влияют на уже полученный снимок.
Безопасное чтение, изменение и ошибки выполнения
Методы 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 и ошибки или обзора стандартной библиотеки.