Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 如何仅映射迭代器中的某些()值?_Rust - Fatal编程技术网

Rust 如何仅映射迭代器中的某些()值?

Rust 如何仅映射迭代器中的某些()值?,rust,Rust,以下两种方法都可以工作(在2次调用中),但它们感觉太冗长了 fn main(){ 设v=vec![Some(0),Some(1),None,Some(2)]; 断言( 向量![0,2,4], v、 iter() .filter(|x | x.is_some()) .map(| x | x.unwrap()*2) 收集::()); 断言( 向量![0,2,4], v、 iter() .filter|u映射(|x |*x) .map(|x | x*2) 收集::()); } 过滤器映射接近我想要

以下两种方法都可以工作(在2次调用中),但它们感觉太冗长了


fn main(){
设v=vec![Some(0),Some(1),None,Some(2)];
断言(
向量![0,2,4],
v、 iter()
.filter(|x | x.is_some())
.map(| x | x.unwrap()*2)
收集::());
断言(
向量![0,2,4],
v、 iter()
.filter|u映射(|x |*x)
.map(|x | x*2)
收集::());
}
过滤器映射接近我想要的:

[filter_map]自动删除选项层。如果你的 映射已返回一个选项,您想跳过它 如果没有,那么过滤器映射使用起来会非常非常好

但它不会打开闭包中的值,因为它希望返回一个选项

是否有一种方法既可以只过滤某些值,又可以通过一次调用映射这些值? 例如:

//假,不起作用
fn main(){
设v=vec![Some(0),Some(1),None,Some(2)];
断言(
向量![0,2,4],
v、 iter()
.map_only_some(|x | x*2)
收集::());
}

我算出了,迭代器的next总是返回一个选项,所以您只需将其展平:

//因为v.iter().next()是Some(Some(0)),所以下面的代码可以工作
断言!(
向量![0,2,4],
v、 iter()
.flatte()
.map(|x | x*2)
收集::());
它不在一次调用中,但它更干净,而且我认为是惯用的

是否有一种方法既可以只过滤某些值,又可以通过一次调用映射这些值

您已经在使用它了
filter\u map()

fn main(){
设v=vec![Some(0),Some(1),None,Some(2)];
断言(
向量![0,2,4],
v、 iter()
.filter|map(|x | x.map(|x | x*2))
收集::()
);
}

请注意,这相当于
。filter_map(|x |*x)
只是更短而已