Functional programming 是否有可能以某种方式铸造Vec<;选项<;价值>&燃气轮机;进入Vec<;价值>;过滤掉锈迹中的任何元素后?

Functional programming 是否有可能以某种方式铸造Vec<;选项<;价值>&燃气轮机;进入Vec<;价值>;过滤掉锈迹中的任何元素后?,functional-programming,rust,iterator,Functional Programming,Rust,Iterator,在编写这样的代码时,我希望有这样一种方法: struct值; fn移除\u缺失(不确定\u向量:Vec)->Vec{ 不确定向量 .into_iter() .过滤器(|元件|匹配元件{ 有些(val)=>正确, None=>false, }) .collect() } 我怎样才能做到这一点?我认为类型暗示机制不够聪明,无法确定结果集合将只包含选项,其中所有此类对象的类型都相同(值) 编译器部分回答了我的问题: error[E0277]:无法通过迭代器在'std::option::option'

在编写这样的代码时,我希望有这样一种方法:

struct值;
fn移除\u缺失(不确定\u向量:Vec)->Vec{
不确定向量
.into_iter()
.过滤器(|元件|匹配元件{
有些(val)=>正确,
None=>false,
})
.collect()
}
我怎样才能做到这一点?我认为类型暗示机制不够聪明,无法确定结果集合将只包含
选项
,其中所有此类对象的类型都相同(

编译器部分回答了我的问题:

error[E0277]:无法通过迭代器在'std::option::option'类型的元素上构建'std::vec::vec'类型的集合`
-->src/lib.rs:10:10
|
10 |收集()
|^^^^^无法从“std::iter::Iterator”生成“std::vec::vec”类型的集合`
|
=help:trait`std::iter::fromtiterator`未为`std::vec::vec'实现`
您可以使用一次过滤和映射元素

let v = vec![None, None, Some(1), Some(2), None, Some(3)];
let filtered: Vec<_> = v.into_iter().filter_map(|e| e).collect();
让v=vec![无,无,部分(1),部分(2),无,部分(3)];
让过滤:Vec=v.进入iter().过滤映射(| e | e).collect();

感谢大家的回答,并指出了一个类似的问题!我很高兴能成为这样一个反应灵敏、充满智慧的社区的一员!我发现
flatte().collect()
能起到作用,我感到惊喜<代码>生锈太棒了!对<代码>展平甚至更好。我总是忘记
选项
也实现了
迭代器