我有Vec<Result<T, E>>
,我想忽略所有Err
值,将其转换为Vec<T>
。我可以这样做:
vec.into_iter().filter(|e| e.is_ok()).map(|e| e.unwrap()).collect()
这是安全的,但我想避免使用unwrap
。有没有更好的方法来写这个?
答案 0 :(得分:16)
我想忽略所有
Err
值
从Result
implements IntoIterator
开始,您可以将Vec
转换为迭代器(它将是迭代器的迭代器),然后将其展平:
vec.into_iter().flatten().collect()
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()