12

我正在尝试将字符串解析为 Rust 中的浮点值列表。我假设有一个聪明的方法可以使用迭代器和Options 来做到这一点;但是,我无法让它忽略Errparse() 调用失败导致的值。Rust 教程似乎没有涵盖任何这样的示例,并且文档充其量是令人困惑的。

我将如何使用函数式向量/列表操作来实现这一点?为我的迭代实现提供更好的 Rust 风格的指针也将不胜感激!

“功能性”风格

遇到一个惊慌失措Err

input.split(" ").map(|s| s.parse::<f32>().unwrap()).collect::<Vec<_>>()

迭代式

按预期忽略非浮点值

fn parse_string(input: &str) -> Vec<f32> {
    let mut vals = Vec::new();
    for val in input.split_whitespace() {
        match val.parse() {
            Ok(v) => vals.push(v),
            Err(_) => (),
        }
    }
    vals
}

fn main() {
    let params = parse_string("1 -5.2  3.8 abc");
    for &param in params.iter() {
        println!("{:.2}", param);
    }
}
4

1 回答 1

14

filter_map做你想做的事,转换值并过滤掉Nones:

input.split(" ").filter_map(|s| s.parse::<f32>().ok()).collect::<Vec<_>>();

请注意ok将 转换ResultOption.

于 2013-10-22T04:10:38.490 回答