РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
710 of 1245 menu

Метод and_modify

Метод and_modify возвращает модифицированную запись Entry, позволяя применить замыкание к значению, если ключ уже присутствует в хеш-таблице. Если ключ отсутствует, замыкание не вызывается, а значение будет вставлено с помощью последующего вызова or_insert, or_insert_with или or_default. Параметром метод принимает замыкание, которое получает изменяемую ссылку на значение и может его модифицировать.

Синтаксис

entry.and_modify(f)

Пример

Давайте увеличим значение, связанное с ключом "a", если он уже присутствует в хеш-таблице:

use std::collections::HashMap; fn main() { let mut map = HashMap::new(); map.insert("a", 1); map.entry("a") .and_modify(|v| *v += 10) .or_insert(0); println!("{:?}", map); }

Результат выполнения кода:

{"a": 11}

Пример

Давайте попробуем модифицировать значение по ключу "b", которого нет в хеш-таблице. Замыкание в and_modify не выполнится, а or_insert добавит новое значение:

use std::collections::HashMap; fn main() { let mut map = HashMap::new(); map.insert("a", 1); map.entry("b") .and_modify(|v| *v += 10) .or_insert(5); println!("{:?}", map); }

Результат выполнения кода:

{"a": 1, "b": 5}

Пример

Давайте посчитаем, сколько раз встречается каждое слово в векторе, используя and_modify и or_insert:

use std::collections::HashMap; fn main() { let words = vec!["a", "b", "a", "c", "a", "b"]; let mut map = HashMap::new(); for word in words { map.entry(word) .and_modify(|count| *count += 1) .or_insert(1); } println!("{:?}", map); }

Результат выполнения кода:

{"a": 3, "b": 2, "c": 1}

Смотрите также

  • метод or_insert,
    который вставляет значение, если ключ отсутствует
  • метод or_insert_with,
    который вставляет значение, вычисленное замыканием
  • метод or_default,
    который вставляет значение по умолчанию
  • метод entry,
    который возвращает запись Entry для указанного ключа
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить