Reference 对迭代器进行迭代并对值进行变异是否会更改集合中的值?
我有一个Reference 对迭代器进行迭代并对值进行变异是否会更改集合中的值?,reference,rust,Reference,Rust,我有一个HashMap,我将其用作迭代器: for (key, mut value) in map { if value == 0u32 { value = 1u32; } println!("{}", value); } 这会编译并打印出预期的值,但它是否在迭代时实际更改了映射中的值,或者我只是对实际值进行阴影处理,然后在迭代器完成后写入值 我假设迭代过程中的变异通常适用于Rust迭代器,对吗 它实际上会改变地图中的值吗 否。事实上地图不再存在: 错
HashMap
,我将其用作迭代器:
for (key, mut value) in map {
if value == 0u32 {
value = 1u32;
}
println!("{}", value);
}
这会编译并打印出预期的值,但它是否在迭代时实际更改了映射中的值,或者我只是对实际值进行阴影处理,然后在迭代器完成后写入值
我假设迭代过程中的变异通常适用于Rust迭代器,对吗
它实际上会改变地图中的值吗
否。事实上地图不再存在:
错误[E0382]:使用移动值:`map`
-->src/main.rs:14:22
|
7 |用于地图中的(键、mut值){
|---值移到了这里
...
14 | println!(“{:?}”,地图);
|^^^移动后此处使用的值
|
=注意:之所以发生移动,是因为'map'的类型为'std::collections::HashMap',而该类型未实现'Copy'特性
您已将映射以及所有键和值的所有权转移到迭代器。它已消失。请注意,映射甚至未声明为可变的,因此您无法对其进行更改
如果要修改所有值,可以:
let mut map: HashMap<u32, u32> = HashMap::new();
for (_key, value) in &mut map {
if *value == 0u32 {
*value = 1u32;
}
println!("{}", value);
}
let mut-map:HashMap=HashMap::new();
对于多个映射中的(_键,值)(&mut map){
如果*值==0u32{
*数值=1u32;
}
println!(“{}”,值);
}
请注意,现在我们有一个键和值的引用,而不是值本身
通常使用Rust迭代器
这取决于该项公开的迭代器。如果存在某种可变引用的迭代器,则是
它实际上会改变地图中的值吗
不。事实上,地图不再存在:
错误[E0382]:使用移动值:`map`
-->src/main.rs:14:22
|
7 |用于地图中的(键、mut值){
|---值移到了这里
...
14 | println!(“{:?}”,地图);
|^^^移动后此处使用的值
|
=注意:之所以发生移动,是因为'map'的类型为'std::collections::HashMap',而该类型未实现'Copy'特性
您已将映射以及所有键和值的所有权转移到迭代器。它已消失。请注意,映射甚至未声明为可变的,因此您无法对其进行更改
如果要修改所有值,可以:
let mut map: HashMap<u32, u32> = HashMap::new();
for (_key, value) in &mut map {
if *value == 0u32 {
*value = 1u32;
}
println!("{}", value);
}
let mut-map:HashMap=HashMap::new();
对于多个映射中的(_键,值)(&mut map){
如果*值==0u32{
*数值=1u32;
}
println!(“{}”,值);
}
请注意,现在我们有一个键和值的引用,而不是值本身
通常使用Rust迭代器
这取决于该项公开的迭代器。如果存在某种可变引用的迭代器,则是