如何避免展开选项 或结果的向量转换成只有成功的价值观是什么时候?

问题描述 投票:8回答:1

我有一个Vec<Result<T, E>>,我想忽略所有Err值,将其转换成Vec<T>。我可以做这个:

vec.into_iter().filter(|e| e.is_ok()).map(|e| e.unwrap()).collect()

这是安全的,但我想避免使用unwrap。有没有更好的方式来写这个?

rust iterator
1个回答
17
投票

我想忽略所有Err

由于Result implements IntoIterator,您可以将您Vec转换成一个迭代器(这将是迭代的迭代器),然后将其压平:

这些方法也工作了Option,这also implements IntoIterator


你也可以转换ResultOption和使用Iterator::filter_map

vec.into_iter().filter_map(|e| e.ok()).collect()
© www.soinside.com 2019 - 2024. All rights reserved.