【发布时间】:2021-08-26 18:54:16
【问题描述】:
我正在尝试在 Option<Vec<>> 上进行迭代。
#[derive(Debug)]
pub struct Person {
pub name: Option<String>,
pub age: Option<u64>,
}
#[derive(Debug)]
pub struct Foo {
pub people: Option<Vec<Person>>,
}
天真地我在使用
for i in foo.people.iter() {
println!("{:?}", i);
}
我实际上是显示整个Vec,而不是遍历Vec 的所有元素。就像我在迭代 Option 的唯一引用。
使用以下内容,我正在迭代 Vec 内容:
for i in foo.people.iter() {
for j in i.iter() {
println!("{:?}", j);
}
}
我不确定这是不是最令人愉快的语法,我相信您应该首先打开 Option 以实际迭代集合。
如果你总是有一个单一的参考,我看不出你可以在哪里实际使用Option::iter。
Here 是游乐场的链接。
【问题讨论】:
-
有什么问题?
-
我不明白在什么情况下你应该使用 Option.iter(),我可能错误地认为它总是返回一个项目。
-
@XavierT。
Option::iter专为您希望将选项视为零元素或一元素容器的情况而设计。它对我来说似乎也不是很有用,但就是这样。 -
@user4815162342
let foo: Vec<Option<T> = vec![]; let bar: Vec<T> = foo.into_iter().flat_map(|x| x).collect();.
标签: rust