为什么 go 中的 map 的遍历是随机的?
Posted jun10ng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么 go 中的 map 的遍历是随机的?相关的知识,希望对你有一定的参考价值。
为什么 go 中的 map 的遍历是随机的?
前言
哈希表是无序的,这很好理解。
但是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 ",k,v)
}
fmt.Println("")
for k,v := range m {
fmt.Printf("%v%v ",k,v)
}
}
33 55 99 88 00 11 22 44 66 77
55 99 33 11 22 44 66 77 88 00
答案是:no
why
查看资料后,我才发现在go 1之前,两次遍历是相同的,但是为什么官方要改掉呢?
其实是为了安全性和稳定性,go开发组发现有些程序员已经开始依赖遍历顺序稳定(不是有序)这个特性来开发程序,这其实并不好,因为这个“稳定”因平台不同而不同,在 win 上可能是 1342,但是在linux上可能就是4312。这会导致程序不可移植,因此go要求开发者自己实现稳定有序的遍历。
参考资料
以上是关于为什么 go 中的 map 的遍历是随机的?的主要内容,如果未能解决你的问题,请参考以下文章