Go:了解映射键中的迭代顺序
在 Go 编程语言中,映射被实现为哈希映射。 Go 编程语言规范中没有明确指定映射键的迭代顺序,因为它可能会根据实现而变化。
哈希函数和等价
Go运行时使用用 C 编写的统一 hashmap 实现。map[string]T 和 map[byte]T 之间的唯一区别在于哈希函数、等价函数和复制
有序迭代与随机迭代
在 Go 1 之前,映射键的迭代顺序仅在发生键冲突时才依赖于插入顺序。否则,顺序与键类型或插入顺序无关。
但是,在最新的 Go 每周版本和 Go 1 中,迭代顺序已被随机化。伪随机选择的密钥启动迭代,并通过伪随机数进行哈希码计算。此更改可确保每次运行程序时的顺序都不同,即使使用相同的输入数据也是如此。
字符串映射:巧合
您对字符串映射的观察显然有一个可预测的迭代顺序是巧合的。虽然特定运行的顺序可能保持不变,但不能保证,并且在不同的执行中可能会有所不同。
以上是为什么Go Map Key的迭代顺序无法保证并且经常出现随机?的详细内容。更多信息请关注PHP中文网其他相关文章!