如何将Vec <option <t >>转换为Option <vec <t >>

时间:2019-02-20 01:04:55

标签: rust

我有一些这样的向量

let example1: Vec<Option<u64>> = vec![None, None, Some(2), Some(35)];
let example2: Vec<Option<u64>> = vec![Some(5), Some(19), Some(4), Some(6)];

并且我想要一个函数,该函数将为None返回example1但为Some([5, 19, 4, 6])返回example2

换句话说,如果任何选项为None,我想要一个返回None的函数,但是如果所有选项均为Some,它将全部解包并返回{{1 }}。

1 个答案:

答案 0 :(得分:7)

将其转换为迭代器并使用Some

.collect::<Option<Vec<_>>

或使用类型注释

let output = vec.into_iter().collect::<Option<Vec<_>>

请参见collect()及其用于let output: Option<Vec<_>> = vec.into_iter().collect(); 的{​​{3}}。