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

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

Ищите элементы массива и ключи Map, сохраняйте порядок вставки и выбирайте между новой коллекцией и изменением существующей.

Найдите элемент, сохраните порядок коллекции или измените её содержимое. Используйте Array для доступа по позиции, Map для пар ключ-значение и Set для уникальных элементов.

Установите Топаз по инструкции «Первая программа». Синтаксис описан в разделе «Коллекции и включения».

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

Сохраните код в collections.tpz.

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()}")

В каталоге с файлом выполните 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 либо ошибка выполнения для неверного индекса
Найти ключ Mapvalues.get(key)Option<V>
Подставить значение при отсутствии ключаvalues.getOr(key, default)V
Проверить наличие значения в Setvalues.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, когда отсутствие позиции допустимо.

КоллекцияМетоды, изменяющие еёМетоды, возвращающие новую коллекцию
Mapinsert, remove, clear, updatemapValues, filter
Setadd, remove, clearunion, 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 и ошибки. Другие задачи ищите в обзоре стандартной библиотеки.