理解 Go 映射中的键值排序
在 Go 中,映射是键值对的无序集合。使用范围循环迭代映射时,返回键和值的顺序是不可预测的。此行为源于地图的内部实现,它优先考虑性能而不是保留顺序。
无序输出的原因
在您的示例中,地图月份包含键值对,其中键是表示月份数字的整数,值是相应的月份名称。当您使用范围循环迭代映射时,Go 运行时会根据映射在内存中的组织方式打印键值对。然而,这种组织方式可能因一次执行而异,从而导致输出无序。
保留顺序
如果您需要键值要按特定顺序打印对,您有两个选项:
1。使用数组
数组是一种保持其元素固定顺序的数据结构。通过使用已知大小的数组,您可以显式设置键值对的顺序。以下是示例代码:
var months [12]string months[0] = "January" months[1] = "Fabruary" // ... Populate the rest of the array
2.对地图键进行排序
您还可以在迭代地图之前对地图键进行排序。这可确保按所需顺序打印键值对。以下是示例代码:
keys := make([]int, 0, len(months)) for key := range months { keys = append(keys, key) } sort.Ints(keys) for _, key := range keys { fmt.Println(key, "-", months[key]) }
通过使用这两种方法中的任何一种,您可以控制地图月份的输出顺序。
以上是为什么迭代 Go Map 时键值对的顺序不可预测?的详细内容。更多信息请关注PHP中文网其他相关文章!