我怎样才能转换Vec >选项 >

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

我有一些像这样的矢量

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

rust
1个回答
7
投票

将其转换为迭代器并使用.collect::<Option<Vec<_>>

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

或使用类型注释

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

请参阅collect()和它用于FromIterator trait implentations的Option

© www.soinside.com 2019 - 2024. All rights reserved.