我正在尝试从向量中读取值,并将这些值用作索引以执行加法运算:
fn main() {
let objetive = 3126.59;
// 27
let values: Vec<f64> = vec![
2817.42, 2162.17, 3756.57, 2817.42, -2817.42, 946.9, 2817.42, 964.42, 795.43, 3756.57,
139.34, 903.58, -3756.57, 939.14, 828.04, 1120.04, 604.03, 3354.74, 2748.06, 1470.8,
4695.71, 71.11, 2391.48, 331.29, 1214.69, 863.52, 7810.01,
];
let values_number = values.len();
let values_index_max = values_number - 1;
let mut additions: Vec<usize> = vec![0];
println!("{:?}", values_number);
while additions.len() > 0 {
let mut addition: f64 = 0.0;
let mut saltar: i32 = 0;
// Sumar valores en additions
for element_index in additions {
let addition_aux = values[element_index];
addition = addition_aux + addition;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误。我该如何解决?
fn main() {
let objetive = 3126.59;
// 27
let values: Vec<f64> = vec![
2817.42, 2162.17, 3756.57, 2817.42, -2817.42, 946.9, 2817.42, 964.42, 795.43, 3756.57,
139.34, 903.58, -3756.57, 939.14, 828.04, 1120.04, 604.03, 3354.74, 2748.06, 1470.8,
4695.71, 71.11, 2391.48, 331.29, 1214.69, 863.52, 7810.01,
];
let values_number = values.len();
let values_index_max = values_number - 1;
let mut additions: Vec<usize> = vec![0];
println!("{:?}", values_number);
while additions.len() > 0 {
let mut addition: f64 = 0.0;
let mut saltar: i32 = 0;
// Sumar valores en additions
for element_index in additions {
let addition_aux = values[element_index];
addition = addition_aux + addition;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这个特定问题的解决方法是借用了Vec你遍历而不是移动:
for element_index in &additions {
let addition_aux = values[*element_index];
addition = addition_aux + addition;
}
Run Code Online (Sandbox Code Playgroud)
但是您的代码还有其他问题。您永远不会additions通过添加或删除元素来进行更改,因此您while additions.len() > 0永远都不会终止。我希望这是因为您还没有完成,并想在编写其余函数之前先解决如何解决紧迫的问题。
现在,您可能会受益于重新阅读Rust Book中有关所有权,移动和借用的章节。