Rust 在将选项或结果向量仅转换为成功值时,如何避免展开?

Rust 在将选项或结果向量仅转换为成功值时,如何避免展开?,rust,iterator,Rust,Iterator,我有一个Vec,我想忽略所有Err值,将其转换为Vec。我可以这样做: vec.into_iter().filter(|e| e.is_ok()).map(|e| e.unwrap()).collect() 这是安全的,但我希望避免使用unwrap。有没有更好的方法写这个 我想忽略所有Err值 因为,您可以将Vec转换为迭代器(迭代器的迭代器),然后将其展平: : : 这些方法也适用于 您还可以将结果转换为选项,并使用: 哈利路亚!刚刚了解了filter\u map()。我这样成功地

我有一个
Vec
,我想忽略所有
Err
值,将其转换为
Vec
。我可以这样做:

vec.into_iter().filter(|e| e.is_ok()).map(|e| e.unwrap()).collect()
这是安全的,但我希望避免使用
unwrap
。有没有更好的方法写这个

我想忽略所有
Err

因为,您可以将
Vec
转换为迭代器(迭代器的迭代器),然后将其展平:

  • :

  • :

这些方法也适用于


您还可以将
结果
转换为
选项
,并使用:


哈利路亚!刚刚了解了
filter\u map()
。我这样成功地使用了它:
let mut-lines:Vec=reader.lines().filter_-map(|l | l.ok()).collect()。为了确保我理解,
filter\u map
转换
Result
ok()
方法返回的选项(如果是
ok(T)
),如果是
错误,则跳过迭代器的该项?多谢了。@PeterCharland或多或少。但是为什么要使用它而不是答案中显示的较短版本呢?我想我还是不明白为什么Intro_iter返回一个2d迭代器。
vec.into_iter().flatten().collect()
vec.into_iter().flat_map(|e| e).collect()
vec.into_iter().filter_map(|e| e.ok()).collect()