pub trait IterMap<I, K, V>: Sized {
// Required methods
fn map_keys<Fk, L>(self, f: Fk) -> MapKeys<I, Fk>
where Fk: FnMut(K) -> L;
fn map_values<Fv, W>(self, f: Fv) -> MapValues<I, Fv>
where Fv: FnMut(V) -> W;
fn filter_keys<Fk>(self, key_op: Fk) -> FilterKeys<I, Fk>
where Fk: FnMut(&K) -> bool;
fn filter_values<Fv>(self, value_op: Fv) -> FilterValues<I, Fv>
where Fv: FnMut(&V) -> bool;
}Expand description
Adds additional methods for Iterators over maps (e.g., HashMap,
BTreeMap, etc.) and other two-element tuples (like (K, V)).
Required Methods§
sourcefn map_keys<Fk, L>(self, f: Fk) -> MapKeys<I, Fk>where
Fk: FnMut(K) -> L,
fn map_keys<Fk, L>(self, f: Fk) -> MapKeys<I, Fk>where
Fk: FnMut(K) -> L,
Maps map keys, or the first element of a two-element tuple (like
(K, V)), leaving the other element intact and untouched.
Examples
use itermap::IterMap;
let map = HashMap::<&str, &str>::from([
("a", "A"),
("b", "B"),
]);
let map: HashMap<String, &str> = map
.into_iter()
.map_keys(String::from)
.collect();Any iterator of two-element tuples will work.
use itermap::IterMap;
let items: Vec<(&str, &str)> = vec![
("a", "A"),
("b", "B"),
];
let items: Vec<(String, &str)> = items
.into_iter()
.map_keys(String::from)
.collect();sourcefn map_values<Fv, W>(self, f: Fv) -> MapValues<I, Fv>where
Fv: FnMut(V) -> W,
fn map_values<Fv, W>(self, f: Fv) -> MapValues<I, Fv>where
Fv: FnMut(V) -> W,
Maps map values (or the second element of a two-element tuple like
(K, V)), leaving the other element intact and untouched.
Examples
use itermap::IterMap;
let map = HashMap::<&str, &str>::from([
("a", "A"),
("b", "B"),
]);
let map: HashMap<&str, String> = map
.into_iter()
.map_values(String::from)
.collect();Any iterator of two-element tuples will work.
use itermap::IterMap;
let items: Vec<(&str, &str)> = vec![
("a", "A"),
("b", "B"),
];
let items: Vec<(&str, String)> = items
.into_iter()
.map_values(String::from)
.collect();sourcefn filter_keys<Fk>(self, key_op: Fk) -> FilterKeys<I, Fk>
fn filter_keys<Fk>(self, key_op: Fk) -> FilterKeys<I, Fk>
Allows filtering based on map keys (or the first element of a
two-element tuple like (K, V)).
Example
use itermap::IterMap;
let mut map = HashMap::from([
("a", "A"),
("b", "B"),
("c", "C"),
("d", "D"),
("e", "E"),
]);
let filtered: HashMap<_, _> = map
.clone()
.into_iter()
.filter_keys(|v| v != &"c")
.collect();
map.remove("c");
assert_eq!(map, filtered);Any iterator of two-element tuples will work.
use itermap::IterMap;
let mut items = vec![
("a", "A"),
("b", "B"),
("c", "C"),
("d", "D"),
("e", "E"),
];
let filtered: Vec<(_, _)> = items
.clone()
.into_iter()
.filter_keys(|v| v != &"c")
.collect();
items.remove(2);
assert_eq!(items, filtered);sourcefn filter_values<Fv>(self, value_op: Fv) -> FilterValues<I, Fv>
fn filter_values<Fv>(self, value_op: Fv) -> FilterValues<I, Fv>
Allows filtering based on map values (or the second element of a
two-element tuple like (K, V)).
Example
use itermap::IterMap;
let mut map = HashMap::from([
("a", "A"),
("b", "B"),
("c", "C"),
("d", "D"),
("e", "E"),
]);
let filtered: HashMap<_, _> = map
.clone()
.into_iter()
.filter_values(|v| v != &"C")
.collect();
map.remove("c");
assert_eq!(map, filtered);Any iterator of two-element tuples will work.
use itermap::IterMap;
let mut items = vec![
("a", "A"),
("b", "B"),
("c", "C"),
("d", "D"),
("e", "E"),
];
let filtered: Vec<(_, _)> = items
.clone()
.into_iter()
.filter_values(|v| v != &"C")
.collect();
items.remove(2);
assert_eq!(items, filtered);Object Safety§
This trait is not object safe.