如何使用函数样式将字符串解析为浮点数列表?

时间:2013-10-22 01:51:27

标签: functional-programming rust

我正在尝试将字符串解析为Rust中的浮点值列表。我认为使用迭代器和Option s有一种聪明的方法可以做到这一点。但是,我无法忽略parse()调用失败导致的Err值。 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);
    }
}

1 个答案:

答案 0 :(得分:9)

filter_map执行您想要的操作,转换值并过滤掉None s:

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

请注意ok方法将Result转换为Option