Golang坑集合: map遍历时直接对map进行操作的坑

下面是代码, 大家可以对每种情况执行多次, 就可以了解一下“内(Ju)幕(Keng)”

学习一下map的基础先

    https://www.runoob.com/go/go-map.html

func main() {
	mapTest := make(map[string]string, 10)
	mapTest["a"] = "A"
	mapTest["b"] = "B"
	mapTest["c"] = "C"
	mapTest["d"] = "D"
	mapTest["e"] = "E"
	mapTest["f"] = "F"
	mapTest["g"] = "G"

	for k, v := range mapTest {

		if k == "b" {
			// 第一种情况
			delete(mapTest, k) //会发生什么情况呢?
			mapTest["b_new"] = "B_new"

			// 第二种情况
			//delete(mapTest, "c")

			// 第三种情况
			//delete(mapTest, "c")
			//mapTest["c_new"]="C_new"
		}
		fmt.Println(k, v)
	}

	fmt.Println("-------------------------------")

	for k, v := range mapTest {
		fmt.Println(k, v)
	}

}

总结:

1. Map 是一种无序的键值对的集合, 记住 重点 : 无序;

2. 每一次的遍历, 结果不会是一样的, 这个同第一点, 因为无序;

3. 过程中删除

    a) 删除的是当前遍历前的 key

    b) 刚好是当前遍历的key

    c) 当前遍历之后的key

    无论如何,在你进行删除之后, 遍历的map大小发生变化

4. 过程中增加数据

   增加数据么, 自然是也是使map大小发生了变化

 

以上情况只是总结, 情况还是自己试试,毕竟不经历风雨, 不知道还夹着冰雹.....

 

你可能感兴趣的:(Golang坑集)