以下代码会将数组中每种颜色的最大值转换为哈希图。也在Rust Playground。
use std::collections::HashMap;
use std::cmp;
fn main() {
let array = [
("blue", 1),
("green", 2),
("red", 3),
("blue", 4),
("green", 1),
("red", 2),
];
let mut scores = HashMap::new();
// Convert array of key value into hashmap
array
.into_iter()
.for_each(|(color, color_count)| {
// Update the HashMap
scores
.entry(color)
.and_modify(|e| { *e = cmp::max(*e, color_count) })
.or_insert(color_count);
});
for (key, value) in &scores {
println!("{}: {}", key, value);
}
println!("The product of the values: {}", scores.values().cloned().fold(1, |res, a| res * a));
}
它将得到以下打印输出:
blue: 4
green: 2
red: 3
The product of the values: 24
我面临的问题是收集的
array
来自花药map
函数。但我面临的问题是,如果我直接将数组转换为 HashMap,HashMap 将存储最新的条目(数组的底部)。我相信有一些更简洁的方法来链接整个事物以使其看起来更整洁?预先感谢
作为一个小改动,我建议使用 entry API,以避免一次搜索
.get()
和第二次搜索 .insert()
,但这与您自己的尝试没有太大不同。
let mut scores = HashMap::<&str, usize>::new();
array.iter().for_each(|(color, color_count)| {
scores
.entry(color)
.and_modify(|c| *c = (*c).max(*color_count))
.or_insert(*color_count);
});