Filter 如何过滤出迭代器';调用函数返回结果的s值::Err?

Filter 如何过滤出迭代器';调用函数返回结果的s值::Err?,filter,rust,pattern-matching,Filter,Rust,Pattern Matching,如果响应结果不正常,您将如何迭代列表并过滤掉所有值?我想做一些类似于filter\u map的事情,但它说我需要返回一个选项 use std::result::Result; fn match_value(vals: i32) -> Result<i32, i32> { match vals { 2 => Ok(1), _ => Err(0), } } fn main() { let values = ve

如果响应
结果
正常
,您将如何迭代列表并过滤掉所有值?我想做一些类似于
filter\u map
的事情,但它说我需要返回一个
选项

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);
}
使用std::result::result;
fn匹配_值(VAL:i32)->结果{
匹配VAL{
2=>正常(1),
_=>错误(0),
}
}
fn main(){
设值=vec![1,2,3,2];
让匹配=值
.国际热核实验堆(iter)
.map(|名称|匹配_值(*名称))
.filter(|x | x.正常()
收集::();
println!(“{:?}”,匹配);
}

如果希望
Ok
中包含的值,请使用,它将iterable值组合到一个迭代器中<代码>选项和
结果
都将
实现为迭代器

let matching = values
    .iter()
    .flat_map(|name| match_value(*name))
    .collect::<Vec<_>>();

无需导入
结果
;这已经是前奏曲的一部分。

这很接近,但我想要原始值。“有办法吗?”罗布,我不明白。
匹配的预期值是多少?如果你的问题中包括了这些,我就不会浪费你的时间了。谢谢你的帮助,你绝对没有浪费我的时间
let matching = values
    .iter()
    .filter(|&&name| match_value(name).is_ok())
    .collect::<Vec<_>>();