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()