package main
import "fmt"
func main(){
sample := map[string]string{
"key1":"value1",
"key2":"value2",
"key3":"value3",
}
for i := 0;i<3;i++{
fmt.Println(sample)
}
}
上面的代码只是打印一个map [string]字符串三次。打印时,为什么Go的地图迭代顺序有所不同?
我期待它一个固定的输出,但它显示为以下几点:
map[key3:value3 key2:value2 key1:value1]
map[key1:value1 key3:value3 key2:value2]
map[key2:value2 key1:value1 key3:value3]
它改变!
而在蟒蛇:
#!/bin/env python
#encoding=utf8
sample = {
"key1":"value1",
"key2":"value2",
"key3":"value3",
}
for i in range(3):
print sample
输出:
{'key3': 'value3', 'key2': 'value2', 'key1': 'value1'}
{'key3': 'value3', 'key2': 'value2', 'key1': 'value1'}
{'key3': 'value3', 'key2': 'value2', 'key1': 'value1'}`
原则上,地图上的顺序不保证,甚至不包括Python的顺序,所以在打印地图内容时确实不应该期待固定的输出。这可能是由于一些内部实现细节。有趣的问题,虽然。 –
@GiulioPiancastelli - 如果有人在第一次发布Python 3.6之后出现(比如我现在):在python 3.6+关键字参数和dicts中,尊重插入顺序(在参考C实现中开始) - 所以可以保留蛋糕并吃掉它;-)以前的python实现中的固定顺序只是半固定的(在python v2中,根据插入顺序,具有散列冲突的键的放置方式不同)... – Dilettant