Метод or_insert
Метод or_insert принадлежит классу Entry и используется
для вставки значения в HashMap, если указанный ключ ещё не
присутствует в коллекции. Если ключ уже есть, метод возвращает
изменяемую ссылку на существующее значение. Параметром метод
принимает значение, которое нужно вставить при отсутствии ключа.
Метод возвращает &mut V - изменяемую ссылку на значение,
связанное с ключом. Это позволяет как читать, так и изменять
значение напрямую.
Синтаксис
entry.or_insert(value)
Пример
Давайте создадим HashMap и вставим значение по ключу
"a", которого ещё нет в коллекции:
use std::collections::HashMap;
fn main()
{
let mut map = HashMap::new();
let res = map.entry("a").or_insert(1);
println!("{}", res);
println!("{:?}", map);
}
Результат выполнения кода:
1
{"a": 1}
Пример
Давайте проверим, что произойдёт, если ключ уже существует. Метод вернёт ссылку на старое значение, не изменяя его:
use std::collections::HashMap;
fn main()
{
let mut map = HashMap::new();
map.insert("a", 1);
let res = map.entry("a").or_insert(100);
println!("{}", res);
println!("{:?}", map);
}
Результат выполнения кода:
1
{"a": 1}
Пример
Давайте используем возвращаемую изменяемую ссылку, чтобы изменить значение сразу после вставки:
use std::collections::HashMap;
fn main()
{
let mut map = HashMap::new();
let res = map.entry("a").or_insert(1);
*res += 10;
println!("{:?}", map);
}
Результат выполнения кода:
{"a": 11}
Смотрите также
-
класс
Entry,
который представляет запись в HashMap -
метод
or_insert_with,
который вставляет значение, вычисляемое функцией -
метод
or_default,
который вставляет значение по умолчанию -
метод
and_modify,
который изменяет значение до вставки