在代码中循环访问主题函数返回的映射时,键未按顺序出现。
如何让键按顺序排列/对地图进行排序,以便键按顺序排列并且值对应?
这是 代码。
原文由 gramme.ninja 发布,翻译遵循 CC BY-SA 4.0 许可协议
在代码中循环访问主题函数返回的映射时,键未按顺序出现。
如何让键按顺序排列/对地图进行排序,以便键按顺序排列并且值对应?
这是 代码。
原文由 gramme.ninja 发布,翻译遵循 CC BY-SA 4.0 许可协议
这里的所有答案现在都包含地图的旧行为。 在 Go 1.12+ 中,你可以只打印一个映射值,它会自动按键排序。 添加此选项是因为它允许轻松测试映射值。
func main() {
m := map[int]int{3: 5, 2: 4, 1: 3}
fmt.Println(m)
// In Go 1.12+
// Output: map[1:3 2:4 3:5]
// Before Go 1.12 (the order was undefined)
// map[3:5 2:4 1:3]
}
地图现在以键排序的顺序打印,以便于测试。排序规则是:
- 适用时,零比较低
- 整数、浮点数和字符串按 < 排序
- NaN 比较小于非 NaN 浮点数
- bool 在 true 之前比较 false
- 复比实,再比虚
- 指针按机器地址比较
- 通道值按机器地址比较
- 结构依次比较每个字段
- 数组依次比较每个元素
- 接口值首先通过描述具体类型的 reflect.Type 进行比较,然后通过前面规则中描述的具体值进行比较。
打印地图时,像 NaN 这样的非自反键值以前显示为
<nil>
。从这个版本开始,打印了正确的值。
在这里 阅读更多。
原文由 Inanc Gumus 发布,翻译遵循 CC BY-SA 4.0 许可协议
7 回答5.3k 阅读
6 回答6.8k 阅读✓ 已解决
4 回答2.3k 阅读
1 回答3.3k 阅读
2 回答922 阅读✓ 已解决
2 回答2.2k 阅读
1 回答2.2k 阅读
Go 博客:Go maps in action 有很好的解释。
这是我修改后的示例代码版本: http ://play.golang.org/p/dvqcGPYy3-
输出: