假设我有一个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的参考?我写了我能想到的唯一方法,但对于我看来微不足道的事情,它看起来有点乏味。