Go 地图打印乱序
在 Go 中,地图是使用哈希表实现的,哈希表以非有序的方式维护键值对。 - 订购时装。因此,迭代地图并不能保证返回键或值的顺序。
为什么地图打印不按顺序?
中根据提供的代码,地图月份是使用表示月份数字和相应名称的键值对定义的。使用范围迭代地图时,打印输出的顺序基于哈希表的内部实现,该哈希表通常针对性能而不是顺序进行优化。
如何修复顺序
有几种方法可以保证map迭代的顺序:
1.使用有序映射:
Go 没有内置的有序映射类型,但有第三方库提供此功能。其中一个库是“github.com/golang/collections#OrderedMap。”
import "github.com/golang/collections#OrderedMap" func main() { m := collections.NewOrderedMap() m.Set(1, "January") // ... for _, month := range m.Keys() { fmt.Println(month, "-", m.Get(month)) } }
2.对映射键进行排序:
另一种选择是从映射中获取键,对它们进行排序,然后迭代排序后的键以按顺序访问值。
func main() { keys := make([]int, 0, len(months)) for k := range months { keys = append(keys, k) } sort.Ints(keys) for _, k := range keys { fmt.Println(k, "-", months[k]) } }
以上是为什么Go Map迭代是无序的,如何保证有序?的详细内容。更多信息请关注PHP中文网其他相关文章!