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

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

Выбор между безопасным чтением, упорядоченным снимком, получением нового результата и явным изменением 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 задачи = ["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, а 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 и ошибки или обзора стандартной библиотеки.