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