【问题标题】:How to mutate items of a vector during iteration? [duplicate]如何在迭代期间改变向量的项目? [复制]
【发布时间】:2020-06-28 20:15:26
【问题描述】:
我有一个Vec 的结构。使用.iter() 迭代此Vec 时,我想编辑for 循环中的每个元素,但我收到一个错误,提示每个元素已被借用,我该如何解决?这是一个小代码示例:
struct complex_struct {
attr1: i32
}
let elements: Vec<complex_struct> = generate_data();
for element in elements.iter() {
element.attr1 = 0;
}
【问题讨论】:
标签:
vector
rust
iterator
borrow-checker
mutability
【解决方案1】:
使用iter_mut 从迭代器中获取可变元素:
#[derive(Debug)]
struct ComplexStruct {
attr1: i32
}
fn main() {
let mut elements: Vec<ComplexStruct> = vec![ComplexStruct { attr1: 5 }];
for element in elements.iter_mut() {
element.attr1 = 0;
}
dbg!(elements); // prints out [ComplexStruct { attr1: 0 }]
}
playground