Go 中的映射:维护顺序和访问元素
在 Go 中,映射提供了一种动态且高效的方式来存储键值对。然而,与数组或切片不同,映射本身并不排序。这可能会导致在迭代它们时输出出现乱序。
以下代码片段演示了此行为:
package main import ( "fmt" ) type monthsType struct { no int text string } var months = map[int]string{ 1:"January", 2:"Fabruary", 3:"March", 4:"April", 5:"May", 6:"June", 7:"July", 8:"August", 9:"September", 10:"October", 11:"Novenber", 12:"December", } func main(){ for no, month := range months { fmt.Print(no) fmt.Println("-" + month) } }
当您运行此代码时,您会注意到地图不按按键顺序打印(数字 1 至 12)。相反,它以明显随机的顺序打印。
解决方案:控制地图中的顺序
要按特定顺序打印地图,您可以选择以下几种方法可以考虑:
1.使用数组:
如果顺序很重要,您可以使用数组按顺序存储元素。数组提供了有序的数据结构,您可以使用索引直接访问元素。
2.排序键:
如果需要将映射保留为数据结构,可以使用 sort.Ints 函数获取键的排序列表,迭代排序后的键,并从映射中检索相应的值.
示例代码:
package main import ( "fmt" "sort" ) type monthsType struct { no int text string } var months = map[int]string{ 1:"January", 2:"Fabruary", 3:"March", 4:"April", 5:"May", 6:"June", 7:"July", 8:"August", 9:"September", 10:"October", 11:"Novenber", 12:"December", } func main(){ var sortedKeys []int for key := range months { sortedKeys = append(sortedKeys, key) } sort.Ints(sortedKeys) fmt.Println("Printing in order:") for _, key := range sortedKeys { fmt.Printf("%d-%s", key, months[key]) } }
在此代码中,sortedKeys 数组创建用于按升序存储映射的键。然后,我们迭代排序后的键并从映射中访问相应的值。这会产生以下输出:
Printing in order: 1-January2-Fabruary3-March4-April5-May6-June7-July8-August9-September10-October11-Novenber12-December
以上是迭代 Go Map 时如何保证有序输出?的详细内容。更多信息请关注PHP中文网其他相关文章!