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
是一个片时一样,这将始终分配正确的空间量。为什么要中途停下来做好事?看见