Стандартная библиотека и среда

Операции с коллекциями

Выбор безопасного чтения, упорядоченного снимка, нового результата или явного изменения Array, Map и Set.

Выбирайте коллекцию по вопросу, который задаёте данным. Array<T> сохраняет позиции, Map<K, V> связывает уникальные ключи со значениями, а Set<T> хранит уникальные элементы. Их методы следуют этим задачам, а не случайному поведению контейнера целевой платформы.

Выберите операцию по задаче

ЗадачаЧто предпочестьРезультат и риск
Прочитать позицию массива, которой может не бытьitems.get(index)Option<T>; отсутствие не вызывает ошибку выполнения
Потребовать позицию как инвариант программыitems[index]T; неверный индекс вызывает ошибку выполнения
Найти необязательный ключ Mapvalues.get(key)Option<V>
Подставить значение для отсутствующего ключаvalues.getOr(key, default)V
Проверить наличие элемента Setvalues.contains(value)bool
Получить порядок Map независимо от последующих измененийkeys, values или entriesКопия-снимок в порядке вставки
Получить преобразованную коллекциюmap, filter, sorted, операции над множествамиНовая коллекция
Изменить существующую коллекциюДокументированный изменяющий метод на let mutИзменение на месте

Используйте Array, Map и Set вместе

TOPAZ
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, а containsKeybool. 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 и ошибки или обзора стандартной библиотеки.