首页 >后端开发 >Golang >为什么Go Map迭代是无序的,如何保证有序?

为什么Go Map迭代是无序的,如何保证有序?

Susan Sarandon
Susan Sarandon原创
2024-12-29 05:20:13278浏览

Why is Go Map Iteration Unordered, and How Can I Guarantee Order?

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn