Метод or_default
Метод or_default вызывается у значения типа Entry, которое получается через метод entry у HashMap. Если запись с указанным ключом уже существует, метод возвращает изменяемую ссылку на её значение. Если записи нет, метод вставляет в словарь значение по умолчанию для типа значения и возвращает изменяемую ссылку на него. Параметров метод не принимает. Тип значения должен реализовывать трейт Default.
Синтаксис
entry.or_default()
Пример
Давайте создадим пустой словарь и с помощью or_default вставим в него значение для ключа "a":
use std::collections::HashMap;
fn main()
{
let mut map: HashMap<&str, i32> = HashMap::new();
let value = map.entry("a").or_default();
*value += 5;
println!("{:?}", map);
}
Результат выполнения кода:
{"a": 5}
Пример
Давайте проверим, что при наличии существующей записи метод or_default не перезаписывает её значение:
use std::collections::HashMap;
fn main()
{
let mut map: HashMap<&str, i32> = HashMap::new();
map.insert("a", 10);
let value = map.entry("a").or_default();
*value += 5;
println!("{:?}", map);
}
Результат выполнения кода:
{"a": 15}
Пример
Давайте используем or_default для подсчёта количества вхождений слов в тексте:
use std::collections::HashMap;
fn main()
{
let mut map: HashMap<&str, i32> = HashMap::new();
for word in ["abcde", "12345", "abcde", "abcde"] {
*map.entry(word).or_default() += 1;
}
println!("{:?}", map);
}
Результат выполнения кода:
{"12345": 1, "abcde": 3}
Смотрите также
-
метод
entry,
который возвращает Entry для указанного ключа -
метод
or_insert,
который вставляет указанное значение, если запись отсутствует -
метод
or_insert_with,
который вставляет значение, вычисленное замыканием -
метод
and_modify,
который изменяет значение существующей записи