构建字符计数的HashMap的惯用Rust方法是什么?

工人乔

我想计算一个字符串中每个字母的出现次数。目的是建立一个HashMap<char,i32>键,键是字符串中的所有字符,值是出现次数。

假设我正在遍历char字符串或输入文件中的值。对于每一个char,如果还没有遇到过,我需要将其添加到HashMap与值1新的密钥,但如果它已经被先前看到的,我需要增加的价值。

这是有效的代码。忍受我,我对Rust很陌生:

use std::collections::HashMap;

fn main() {
    let mut letter_counts: HashMap<char,i32> = HashMap::new();

    let input_string = "Hello, world!";
    let char_vec: Vec<char> = input_string.to_lowercase().chars().collect();
    for c in char_vec {
        if let Some(x) = letter_counts.get_mut(&c) {
            *x = *x + 1;
        } else {
            letter_counts.insert(c,1);
        }
    }
    println!("{:?}",letter_counts);
}

我想知道的是,Rust是否有惯用的方法来做到这一点?习惯用语,我的意思是说,有一种标准的库类型(如Python的defaultdict),或HashMap上的方法(如Java的HashMap.computeIfAbsent),它比我手工编码该算法更简单,更清晰和/或更少出错。 ?

bk2204

如果使用以下Entry界面,这可能会使您想做的事情更容易些,或者有些惯用语

use std::collections::HashMap;

fn main() {
    let mut letter_counts: HashMap<char,i32> = HashMap::new();

    let input_string = "Hello, world!";
    let char_vec: Vec<char> = input_string.to_lowercase().chars().collect();
    for c in char_vec {
        *letter_counts.entry(c).or_insert(0) += 1;
    }
    println!("{:?}",letter_counts);
}

这样,您就可以创建不存在的条目,并同时对其进行修改。

如果您想要更多功能,可以执行以下操作:

use std::collections::HashMap;

fn main() {
    let input_string = "Hello, world!";
    let letter_counts: HashMap<char, i32> =
        input_string
            .to_lowercase()
            .chars()
            .fold(HashMap::new(), |mut map, c| {
                *map.entry(c).or_insert(0) += 1;
                map
            });
    println!("{:?}", letter_counts);
}

这使用折叠来累积物品。

如果您正在寻找一种标准的库函数来计算某项的出现频率,那么就没有了。功能方法足够优雅,以至于我个人并不认为这是一个错误,这是我在这种情况下通常用于大多数普通的惯用Rust代码的方法。在Rust中,使用迭代器非常普遍。

正如其他人所提到的,对于某些情况,当然还有一些更专业的替代方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Rust中检查字符串是否以某个字符开头的正确且惯用的方法是什么?

来自分类Dev

Rust惯用的将值格式化为多种字符串的方式是什么?

来自分类Dev

在 Erlang 中将字符串转换为字符的最惯用的方法是什么?

来自分类Dev

映射这些数据的惯用方法是什么?

来自分类Dev

在Rust中,将&str拆分为每个字符一个&str的迭代器的惯用方式是什么?

来自分类Dev

Scala惯用的基于规则的验证方法是什么?

来自分类Dev

格式化此语句的惯用C方法是什么

来自分类Dev

在OCaml中汇总列表的最惯用的(或最快的)方法是什么?

来自分类Dev

传递setState回调的最惯用的方法是什么?

来自分类Dev

在IO中对谓词采取行动的惯用Haskell方法是什么?

来自分类Dev

使用C格式字符串构建C ++字符串的最佳方法是什么?

来自分类Dev

在Rust中打印用空格分隔的迭代器的惯用方式是什么?

来自分类Dev

在Rust中具有相同属性的多个结构的惯用方式是什么?

来自分类Dev

在稳定的Rust中为大量数组实现特征的惯用方式是什么?

来自分类Dev

使用Boot时,将编译的Cljs构建/移动到任意目录的惯用方式是什么?

来自分类Dev

在JavaScript中用计数器替换字符串并递增计数器的最佳方法是什么?

来自分类Dev

在Rust中实现字符串缓冲区的最佳方法是什么?

来自分类Dev

在Rust中,确定字符是否在Unicode范围内的最简单方法是什么?

来自分类Dev

Laravel用查询字符串构建外部URL的最佳方法是什么?

来自分类Dev

在多个类上构建字符串的最佳方法是什么

来自分类Dev

从多个字符串构建文件路径的正确方法是什么?

来自分类常见问题

为什么对usize数字进行减号运算不能为负,Rust惯用的处理方式是什么?

来自分类Dev

为什么对usize数字进行减号运算不能为负,Rust惯用的处理方式是什么?

来自分类Dev

将Vec打印为字符串的惯用方式是什么?

来自分类Dev

惯用Java语言中“惯用”的定义是什么?

来自分类Dev

在Rust中,根据编译目标OS,将不同类型的值分配给变量的惯用方式是什么?

来自分类Dev

测试AngularJS指令的惯用方式是什么?

来自分类Dev

解决相关对象的惯用方式是什么?

来自分类Dev

编写链表前缀的惯用方式是什么?

Related 相关文章

  1. 1

    在Rust中检查字符串是否以某个字符开头的正确且惯用的方法是什么?

  2. 2

    Rust惯用的将值格式化为多种字符串的方式是什么?

  3. 3

    在 Erlang 中将字符串转换为字符的最惯用的方法是什么?

  4. 4

    映射这些数据的惯用方法是什么?

  5. 5

    在Rust中,将&str拆分为每个字符一个&str的迭代器的惯用方式是什么?

  6. 6

    Scala惯用的基于规则的验证方法是什么?

  7. 7

    格式化此语句的惯用C方法是什么

  8. 8

    在OCaml中汇总列表的最惯用的(或最快的)方法是什么?

  9. 9

    传递setState回调的最惯用的方法是什么?

  10. 10

    在IO中对谓词采取行动的惯用Haskell方法是什么?

  11. 11

    使用C格式字符串构建C ++字符串的最佳方法是什么?

  12. 12

    在Rust中打印用空格分隔的迭代器的惯用方式是什么?

  13. 13

    在Rust中具有相同属性的多个结构的惯用方式是什么?

  14. 14

    在稳定的Rust中为大量数组实现特征的惯用方式是什么?

  15. 15

    使用Boot时,将编译的Cljs构建/移动到任意目录的惯用方式是什么?

  16. 16

    在JavaScript中用计数器替换字符串并递增计数器的最佳方法是什么?

  17. 17

    在Rust中实现字符串缓冲区的最佳方法是什么?

  18. 18

    在Rust中,确定字符是否在Unicode范围内的最简单方法是什么?

  19. 19

    Laravel用查询字符串构建外部URL的最佳方法是什么?

  20. 20

    在多个类上构建字符串的最佳方法是什么

  21. 21

    从多个字符串构建文件路径的正确方法是什么?

  22. 22

    为什么对usize数字进行减号运算不能为负,Rust惯用的处理方式是什么?

  23. 23

    为什么对usize数字进行减号运算不能为负,Rust惯用的处理方式是什么?

  24. 24

    将Vec打印为字符串的惯用方式是什么?

  25. 25

    惯用Java语言中“惯用”的定义是什么?

  26. 26

    在Rust中,根据编译目标OS,将不同类型的值分配给变量的惯用方式是什么?

  27. 27

    测试AngularJS指令的惯用方式是什么?

  28. 28

    解决相关对象的惯用方式是什么?

  29. 29

    编写链表前缀的惯用方式是什么?

热门标签

归档