HashMap[K: K, V: V, H: HashFunction[K] val]
Ассоциативный массив с квадратическим зондированием. Перераспределение происходит при коэффициенте загрузки 0,75. Размеры перераспределённого массива увеличиваются в 2 раза. Функцию хеширования можно подставить в тип, чтобы создать различные типы словарей.
class ref HashMap[K: K, V: V, H: HashFunction[K] val]
Конструкторы
create
Создаёт массив с пространством для предварительной выделенной памяти (prealloc) элементов без перераспределения. По умолчанию равно 6.
new ref create( prealloc: USize val = 6) : HashMap[K, V, H] ref^
Параметры
- prealloc: USize val = 6
Возвращает
- HashMap[K, V, H] ref^
Общедоступные функции
size
Количество элементов в словаре.
fun box size() : USize val
Возвращает
- USize val
space
Доступное пространство в словаре. Перераспределение произойдёт, когда размер (size) / пространство (space) ≥ 0,75.
fun box space() : USize val
Возвращает
- USize val
apply
Получает значение из словаря. Возбуждает ошибку, если такого элемента нет.
fun box apply( key: box->K!) : this->V ?
Параметры
- key: box->K!
Возвращает
- this->V ?
update
Устанавливает значение в словаре. Возвращает старое значение, если оно существовало, иначе None. Если предыдущего значения не было, может произойти перераспределение.
fun ref update( key: K, value: V) : (V^ | None val)
Параметры
- key: K
- value: V
Возвращает
- (V^ | None val)
upsert
Комбинирует предоставленное значение с текущим значением для предоставленного ключа, используя предоставленную функцию. Если предоставленный ключ ещё не добавлен в словарь, он устанавливает его значение в предоставленное значение и игнорирует предоставленную функцию.
Например, если у нас есть словарь с I64 значениями и мы хотим добавить 4 к текущему значению для ключа "test", которое, скажем, сейчас равно 2. Мы вызываем
m.upsert("test", 4, {(current, provided) => current + provided })
Это изменяет значение, связанное с "test", на 6.
Если мы ещё не добавили ключ "new-key" в словарь и вызываем
m.upsert("new-key", 4, {(current, provided) => current + provided })
то "new-key" добавляется в словарь со значением 4.
Возвращает значение, которому мы установили ключ.
fun ref upsert(
key: K,
value: V,
f: {(V, V): V^}[K, V, H] box)
: V
Параметры
- key: K
- value: V
- f: {(V, V): V^}[K, V, H] box
Возвращает
- V
insert
Устанавливает значение в словаре. Возвращает новое значение, позволяя его повторное использование.
fun ref insert( key: K, value: V) : V!
Параметры
- key: K
- value: V
Возвращает
- V!
insert_if_absent
Устанавливает значение в словаре, если ключ в словаре ещё не существует. Экономит дополнительный поиск при выполнении операций вроде:
if not my_map.contains(my_key) then my_map(my_key) = my_value end
Возвращает значение, также как и insert, позволяя использовать 'insert_if_absent' как прямую замену для insert.
fun ref insert_if_absent( key: K, value: V) : V
Параметры
- key: K
- value: V
Возвращает
- V
remove
Удаляет значение из словаря и возвращает его. Возбуждает ошибку, если для данного ключа значения не было.
fun ref remove( key: box->K!) : (K^ , V^) ?
Параметры
- key: box->K!
Возвращает
- (K^ , V^) ?
get_or_else
Получает значение, связанное с предоставленным ключом, если оно существует. В противном случае возвращает предоставленное альтернативное значение.
fun box get_or_else( key: box->K!, alt: this->V) : this->V
Параметры
- key: box->K!
- alt: this->V
Возвращает
- this->V
contains
Проверяет, содержит ли словарь ключ k.
fun box contains( k: box->K!) : Bool val
Параметры
- k: box->K!
Возвращает
- Bool val
concat
Добавляет пары K, V из итератора в словарь.
fun ref concat( iter: Iterator[(K^ , V^)] ref) : None val
Параметры
- iter: Iterator[(K^ , V^)] ref
Возвращает
- None val
add[optional H2: HashFunction[this->K!] val]
Этот словарь с новым сопоставлением (ключ, значение).
fun box add[optional H2: HashFunction[this->K!] val]( key: this->K!, value: this->V!) : HashMap[this->K!, this->V!, H2] ref^
Параметры
- key: this->K!
- value: this->V!
Возвращает
- HashMap[this->K!, this->V!, H2] ref^
sub[optional H2: HashFunction[this->K!] val]
Этот словарь без заданного ключа.
fun box sub[optional H2: HashFunction[this->K!] val]( key: this->K!) : HashMap[this->K!, this->V!, H2] ref^
Параметры
- key: this->K!
Возвращает
- HashMap[this->K!, this->V!, H2] ref^
next_index
Для заданного индекса возвращает следующий индекс, имеющий заполненный ключ и значение. Возбуждает ошибку, если такого индекса нет.
fun box next_index( prev: USize val = call) : USize val ?
Параметры
- prev: USize val = call
Возвращает
- USize val ?
index
Возвращает ключ и значение по заданному индексу. Возбуждает ошибку, если индекс не заполнен.
fun box index( i: USize val) : (this->K , this->V) ?
Параметры
- i: USize val
Возвращает
- (this->K , this->V) ?
compact
Минимизировать используемую память для словаря.
fun ref compact() : None val
Возвращает
- None val
clone[optional H2: HashFunction[this->K!] val]
Создать копию. Типы ключей и значений могут отличаться из-за алиасинга и адаптации представления.
fun box clone[optional H2: HashFunction[this->K!] val]() : HashMap[this->K!, this->V!, H2] ref^
Возвращает
- HashMap[this->K!, this->V!, H2] ref^
clear
Удалить все записи.
fun ref clear() : None val
Возвращает
- None val
keys
Возвратить итератор по ключам.
fun box keys() : MapKeys[K, V, H, this->HashMap[K, V, H] ref] ref^
Возвращает
values
Возвратить итератор по значениям.
fun box values() : MapValues[K, V, H, this->HashMap[K, V, H] ref] ref^
Возвращает
pairs
Возвратить итератор по парам ключ-значение.
fun box pairs() : MapPairs[K, V, H, this->HashMap[K, V, H] ref] ref^
Возвращает
© 2016-2020, The Pony Developers
© 2014-2015, Causality Ltd.
Licensed under the BSD 2-Clause License.
https://stdlib.ponylang.io/collections-HashMap