Метод retain
Метод retain позволяет выборочно удалять элементы из хеш-таблицы.
Он принимает замыкание (функцию-предикат), которое получает ссылки
на ключ и значение. Если замыкание возвращает true, элемент
остаётся в коллекции, если false - удаляется. Метод изменяет
исходный словарь и не возвращает значения.
Синтаксис
hashmap.retain(|key, value| condition)
Пример
Давайте создадим HashMap с числовыми ключами и значениями
и оставим только те элементы, значение которых больше 3:
use std::collections::HashMap;
fn main()
{
let mut map = HashMap::new();
map.insert(1, 10);
map.insert(2, 20);
map.insert(3, 30);
map.insert(4, 40);
map.insert(5, 50);
map.retain(|_key, value| *value > 30);
println!("{:?}", map);
}
Результат выполнения кода:
{4: 40, 5: 50}
Пример
Давайте отфильтруем HashMap по ключу, оставив только чётные ключи:
use std::collections::HashMap;
fn main()
{
let mut map = HashMap::new();
map.insert(1, "a");
map.insert(2, "b");
map.insert(3, "c");
map.insert(4, "d");
map.insert(5, "e");
map.retain(|key, _value| key % 2 == 0);
println!("{:?}", map);
}
Результат выполнения кода:
{2: "b", 4: "d"}
Пример
Давайте проверим, что будет, если ни один элемент не удовлетворит условию:
use std::collections::HashMap;
fn main()
{
let mut map = HashMap::new();
map.insert(1, "abcde");
map.insert(2, "12345");
map.retain(|_key, value| value.len() > 10);
println!("{:?}", map);
}
Результат выполнения кода:
{}