我有一个Vec<Result<T, E>>
,我想忽略所有Err
值,将其转换成Vec<T>
。我可以做这个:
vec.into_iter().filter(|e| e.is_ok()).map(|e| e.unwrap()).collect()
这是安全的,但我想避免使用unwrap
。有没有更好的方式来写这个?
我想忽略所有
Err
值
由于Result
implements IntoIterator
,您可以将您Vec
转换成一个迭代器(这将是迭代的迭代器),然后将其压平:
Iterator::flatten
:
vec.into_iter().flatten().collect()
Iterator::flat_map
:
vec.into_iter().flat_map(|e| e).collect()
这些方法也工作了Option
,这also implements IntoIterator
。
你也可以转换Result
成Option
和使用Iterator::filter_map
:
vec.into_iter().filter_map(|e| e.ok()).collect()