我有一些像这样的矢量
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
,它会将它们全部展开并返回Some
。
将其转换为迭代器并使用.collect::<Option<Vec<_>>
。
let output = vec.into_iter().collect::<Option<Vec<_>>
或使用类型注释
let output: Option<Vec<_>> = vec.into_iter().collect();
请参阅collect()
和它用于FromIterator
trait implentations的Option
。