golang map迭代时更改值?
在Go语言中,使用range
关键字迭代一个map
时,可以获取到map
的键和值。但是,在迭代时修改map
中的值可能会导致意外的结果。这是因为range
迭代过程中使用的是map
的副本,而不是原始map
,所以修改副本中的值不会影响到原始map
。
例如:
func main() { m := map[string]int{"a": 1, "b": 2, "c": 3} for k, v := range m { v = v * 2 } fmt.Println(m) // 输出: map[a:1 b:2 c:3] }
在这个例子中,我们定义了一个map
,并使用range
迭代map
中的键和值。在迭代时,我们将值乘以2,但是最终输出的map
中的值没有发生变化,因为我们修改的是迭代过程中的副本,而不是原始map
。
如果想要修改map
中的值,需要使用map
的键来直接访问并修改原始map
中的值。例如:
func main() { m := map[string]int{"a": 1, "b": 2, "c": 3} for k := range m { m[k] = m[k] * 2 } fmt.Println(m) // 输出: map[a:2 b:4 c:6] }
在这个例子中,我们使用range
迭代map
的键,并使用键来直接访问和修改原始map
中的值。最终输出的map
中的值被修改为原始值的两倍。
总之,在迭代map
时,应该避免修改迭代过程中的副本,而是应该直接访问和修改原始map
中的值。