从字符串和yield向量中过滤所有非整数

Syn*_*ose 3 rust

我有一个Into<String>名为的变量t_num.我试图从字符串中过滤掉所有非整数,并返回一个Vec<usize>包含字符串中所有整数的向量.这是我的尝试:

     let filter_vec = t_num.into().chars().
         filter(|a| a.parse::<usize>()).                                                                                      
         collect::<Vec<_>>();
Run Code Online (Sandbox Code Playgroud)

问题是我得到了错误

error: no method named `parse` found for type `&char` in the current scope
       filter(|a| a.parse::<usize>()).
Run Code Online (Sandbox Code Playgroud)

所以问题是char没有实现parse,是否有类似于parse实现的方法char

Fra*_*gné 6

char有一个to_digit方法将字符转换为相应的数字.

fn parse_digits<A: Into<String>>(t_num: A) -> Vec<u32> {
    t_num.into().chars().
        filter_map(|a| a.to_digit(10)).
        collect::<Vec<_>>()
}

fn main() {
    println!("{:?}", parse_digits("123asd456")); // prints [1, 2, 3, 4, 5, 6]
}
Run Code Online (Sandbox Code Playgroud)

  • 输入应该是plain&str.没有任何理由分配额外的String. (3认同)