如何将一组值转换为对它们进行计数的 HashMap?

Her*_*shi 5 rust

我有一组重复的项目,我想创建一个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 上的“字谜”问题编写解决方案时出现的

She*_*ter 9

它是否更优雅值得怀疑,但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)