我正在尝试将字符串解析为 Rust 中的浮点值列表。我假设有一种聪明的方法可以使用迭代器和 Option
来做到这一点;但是,我无法让它忽略 parse() 调用失败导致的 Err
值。 Rust 教程似乎没有涵盖任何此类示例,文档充其量也令人困惑。
我将如何使用函数式向量/列表操作来实现它?为我的迭代实现提供更好的 Rust 风格的指针也将不胜感激!
“功能性”风格
遇到Err
时出现 panic
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 ¶m in params.iter() {
println!("{:.2}", param);
}
}
最佳答案
filter_map
做你想做的,转换值并过滤掉 None
s:
input.split(" ").filter_map(|s| s.parse::<f32>().ok()).collect::<Vec<_>>();
注意 ok
方法将 Result
转换为 Option
。
关于functional-programming - 如何使用函数式样式将字符串解析为 float 列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19507730/