Jef*_*eff 8 functional-programming rust
我试图将一个字符串解析为Rust中的浮点值列表.我认为有一种聪明的方法可以使用迭代器和Options 来做到这一点; 但是,我无法忽略Errparse()调用失败导致的值.Rust教程似乎没有涵盖任何这样的例子,文档充其量也令人困惑.
我将如何使用功能样式的矢量/列表操作来实现它?对于我的迭代实现更好的Rust风格的指针也将受到赞赏!
"功能性"风格
遇到麻烦时会发生恐慌 Err
input.split(" ").map(|s| s.parse::<f32>().unwrap()).collect::<Vec<_>>()
Run Code Online (Sandbox Code Playgroud)
迭代式
按预期忽略非浮点值
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);
}
}
Run Code Online (Sandbox Code Playgroud)
filter_map做你想要的,转换价值并过滤掉Nones:
input.split(" ").filter_map(|s| s.parse::<f32>().ok()).collect::<Vec<_>>();
Run Code Online (Sandbox Code Playgroud)
请注意将ok其转换Result为a 的方法Option.
| 归档时间: |
|
| 查看次数: |
4029 次 |
| 最近记录: |