标签:ref 现在 自己 顺序 自己实现 稳定性 遍历 doc 输出
哈希表是无序的,这很好理解。
但是golang中的 map 两次遍历不但是无序的,而且两次不相同,见下:
func f() {
s := []int{0,1,2,3,4,5,6,7,8,9}
m := map[int]int{}
for i := range s{
m[i] = i
}
//以下两次输出会相同吗?
for k,v := range m {
fmt.Printf("%v%v \t",k,v)
}
fmt.Println("")
for k,v := range m {
fmt.Printf("%v%v \t",k,v)
}
}
33 55 99 88 00 11 22 44 66 77
55 99 33 11 22 44 66 77 88 00
答案是:no
查看资料后,我才发现在go 1之前,两次遍历是相同的,但是为什么官方要改掉呢?
其实是为了安全性和稳定性,go开发组发现有些程序员已经开始依赖遍历顺序稳定(不是有序)这个特性来开发程序,这其实并不好,因为这个“稳定”因平台不同而不同,在 win 上可能是 1342,但是在linux上可能就是4312。这会导致程序不可移植,因此go要求开发者自己实现稳定有序的遍历。
标签:ref 现在 自己 顺序 自己实现 稳定性 遍历 doc 输出
原文地址:https://www.cnblogs.com/Jun10ng/p/12771077.html