Rust 是否可以用迭代器替换将每个项的成员变量推入Vec的for循环?

Rust 是否可以用迭代器替换将每个项的成员变量推入Vec的for循环?,rust,iterator,Rust,Iterator,我有如下代码 pub struct MyOtherStruct { pub value: MyStruct, } #[derive(Clone)] pub struct MyStruct { pub field: Vec<u8>, } fn example(v: &[MyOtherStruct]) { let mut vec_mystruct: Vec<MyStruct> = vec![]; for x in v {

我有如下代码

pub struct MyOtherStruct {
    pub value: MyStruct,
}

#[derive(Clone)]
pub struct MyStruct {
    pub field: Vec<u8>,
}

fn example(v: &[MyOtherStruct]) {
    let mut vec_mystruct: Vec<MyStruct> = vec![];
    for x in v {
        vec_mystruct.push(x.value.clone());
    }
}
pub结构MyOtherStruct{
pub value:MyStruct,
}
#[衍生(克隆)]
发布结构MyStruct{
pub字段:Vec,
}
fn示例(v:&[MyOtherStruct]){
让mut-vec_-mystruct:vec=vec![];
对于v中的x{
vec_mystruct.push(x.value.clone());
}
}

可以用迭代器实现这个for循环吗?

可以用
extend
实现,让我们将
V
重命名为
vector\u of_other\u struct

vec_mystruct.extend(vector_of_other_struct.iter().map(|x| x.value.clone()));


注意:通过这种方式,可以避免每次推送时重新分配,因为参数迭代器有一个
size\u提示
信息。

extend
在您希望向预先存在的
Vec
添加元素时非常有用。但是,在您询问(从切片创建向量)的情况下,您可以在一行中更简洁地执行此操作:

let vec_mystruct: Vec<_> = V.iter().map(|x| x.value.clone()).collect();
让vec_mystruct:vec=V.iter().map(|x | x.value.clone()).collect();

V.iter()
是一个片时,就像
V
是一个片时一样,这将始终分配正确的空间量。

为什么要中途停下来做好事?看见