【发布时间】:2021-07-18 21:58:33
【问题描述】:
假设我有一个Vec,其中包含一个名为“Dummy”的结构的可选框。
struct Dummy {
foo: i32
}
fn main() {
let a = Box::new(Dummy {foo: 42});
let b = Box::new(Dummy {foo: 69});
let c = Box::new(Dummy {foo: 420});
let bar = vec![Some(a), None, Some(b), None, Some(c)];
// This works, but it's a lot of calls for a single task.
let only_elements: Vec<&Box<Dummy>> = bar.iter()
.filter(|&el| el.is_some())
.map(|el| el.as_ref().unwrap())
.collect();
for el in only_elements {
println!("{}", el.foo);
}
}
如何以更漂亮的方式将这个Vec 选项转换为简单的Vec 引用?
我写了我能想到的唯一方法,但是对于我看来微不足道的事情,它看起来有点乏味。
【问题讨论】:
-
恐怕我需要更多细节,因为我已经在使用选项而不是结果。