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迭代器

这取决于该项公开的迭代器。如果存在某种可变引用的迭代器,则是