Метод entry
Метод entry возвращает значение типа Entry,
которое представляет запись в HashMap для указанного
ключа. Параметром метод принимает ключ, запись которого
нужно получить. Если ключа ещё нет в словаре, запись
создаётся «на месте» и позволяет добавить значение
через методы or_insert, or_insert_with
или or_default. Метод удобен, когда нужно
за один поиск решить, вставлять значение или изменять
уже существующее.
Синтаксис
hashmap.entry(key)
Пример
Давайте вставим значение для ключа "a",
если его ещё нет в словаре:
use std::collections::HashMap;
fn main()
{
let mut map = HashMap::new();
map.entry("a").or_insert(1);
map.entry("b").or_insert(2);
println!("{:?}", map);
}
Результат выполнения кода:
{"a": 1, "b": 2}
Пример
Давайте увеличим значение для ключа "a"
на 10, а для отсутствующего ключа
"c" установим значение 0:
use std::collections::HashMap;
fn main()
{
let mut map = HashMap::new();
map.insert("a", 5);
*map.entry("a").or_insert(0) += 10;
*map.entry("c").or_insert(0) += 10;
println!("{:?}", map);
}
Результат выполнения кода:
{"a": 15, "c": 10}
Пример
Давайте воспользуемся методом and_modify
у записи, чтобы изменить существующее значение
и добавить новое при отсутствии ключа:
use std::collections::HashMap;
fn main()
{
let mut map = HashMap::new();
map.insert("a", 1);
map.entry("a")
.and_modify(|v| *v += 100)
.or_insert(0);
map.entry("b")
.and_modify(|v| *v += 100)
.or_insert(0);
println!("{:?}", map);
}
Результат выполнения кода:
{"a": 101, "b": 0}
Смотрите также
-
класс
Entry,
который представляет запись словаря -
метод
or_insert,
который вставляет значение, если ключа ещё нет -
метод
or_insert_with,
который вставляет значение, вычисленное функцией -
метод
and_modify,
который изменяет значение существующей записи