Rob*_*Rob 3 filter pattern-matching rust
您将如何遍历列表并过滤掉响应Result不是的所有值Ok?我想做类似的事情filter_map,但它说我需要返回一个Option.
use std::result::Result;
fn match_value(vals: i32) -> Result<i32, i32> {
match vals {
2 => Ok(1),
_ => Err(0),
}
}
fn main() {
let values = vec![1, 2, 3, 2];
let matching = values
.iter()
.map(|name| match_value(*name))
.filter(|x| x.is_ok())
.collect::<Vec<_>>();
println!("{:?}", matching);
}
Run Code Online (Sandbox Code Playgroud)
如果您想要包含在 中的值Ok,请使用Iterator::flat_map,它将可迭代值组合成一个迭代器。Option并且Result都实现IntoIterator:
let matching = values
.iter()
.flat_map(|name| match_value(*name))
.collect::<Vec<_>>();
Run Code Online (Sandbox Code Playgroud)
如果您想要原始值,只需使用filter:
let matching = values
.iter()
.filter(|&&name| match_value(name).is_ok())
.collect::<Vec<_>>();
Run Code Online (Sandbox Code Playgroud)
无需导入Result;它已经是前奏的一部分。
| 归档时间: |
|
| 查看次数: |
717 次 |
| 最近记录: |