Вы пытаетесь установить элемент вектора электронной таблицы, повторяя его внутри.Поскольку вы всегда хотите использовать spreadsheet[0].amount
и spreadsheet[1].amount
, вы можете клонировать эти значения в другую переменную и работать с ними вместо использования их внутри электронной таблицы.
Вот рабочий код:
#[derive(Debug)]
struct Column {
header: String,
amount: i32,
}
fn main() {
let mut spreadsheet: Vec<Column> = Vec::new();
spreadsheet.push(Column {
header: "Car".to_string(),
amount: 30300,
});
spreadsheet.push(Column {
header: "House".to_string(),
amount: 210800,
});
spreadsheet.push(Column {
header: "Total".to_string(),
amount: 0,
});
let car_amount = spreadsheet[0].amount;
let header_amount = spreadsheet[1].amount;
spreadsheet.iter_mut().for_each(|column| {
if column.header == "Total" {
column.amount = car_amount + header_amount;
} else {
column.amount -= 300;
}
});
for column in spreadsheet {
println!("{:?}", column);
}
}
Игровая площадка с использованием iter()
Поскольку вы хотите выполнять эти операции в цикле for вместо итератора, вы можете изменить кодовый блок spreadsheet.iter_mut()...
на следующий:
for column in &mut spreadsheet {
if column.header == "Total" {
column.amount = car_amount + header_amount;
} else {
column.amount -= 300;
}
}
Детская площадка с использованием for loop