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 次 |
最近记录: |