我有一组重复的项目,我想创建一个HashMap
以项目为键的项目,以及它们在原始集合中出现的次数。
我正在处理的具体示例是一个字符串,我想计算每个字符出现的次数。
我可以做这样的事情:
fn into_character_map(word: &str) -> HashMap<char, i32> {
let mut characters = HashMap::new();
for c in word.chars() {
let entry = characters.entry(c).or_insert(0);
*entry += 1;
}
characters
}
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有更优雅的解决方案。我正在考虑使用collect()
,但它不维护项目之间的状态,所以似乎不支持我需要的东西。
这是在我为Exercism 上的“字谜”问题编写解决方案时出现的。
它是否更优雅值得怀疑,但fold
使用 aHashMap
需要更少的行:
fn into_character_map(word: &str) -> HashMap<char, i32> {
word.chars().fold(HashMap::new(), |mut acc, c| {
*acc.entry(c).or_insert(0) += 1;
acc
})
}
Run Code Online (Sandbox Code Playgroud)