ZBLOG

golang 如何有序的遍历map[string]string

在 Go 语言中,map 是无序的,因此需要使用其他数据结构来实现有序遍历。以下是几种可用的方法:

  1. 使用 slice 存储 map 的 key,并对 key 进行排序,然后遍历 slice 获取对应的 value。
m := map[string]string{
    "a": "apple",
    "b": "banana",
    "c": "cat",
}

keys := make([]string, len(m))
i := 0
for k := range m {
    keys[i] = k
    i++
}

sort.Strings(keys)

for _, k := range keys {
    fmt.Println(k, m[k])
}
  1. 使用结构体存储 map 的 key 和 value,并对结构体进行排序,然后遍历结构体获取值。
type KeyValue struct {
    Key   string
    Value string
}

type KeyValueList []KeyValue

func (kvl KeyValueList) Len() int           { return len(kvl) }
func (kvl KeyValueList) Less(i, j int) bool { return kvl[i].Key < kvl[j].Key }
func (kvl KeyValueList) Swap(i, j int)      { kvl[i], kvl[j] = kvl[j], kvl[i] }

m := map[string]string{
    "a": "apple",
    "b": "banana",
    "c": "cat",
}

kvlist := make(KeyValueList, len(m))

i := 0
for k, v := range m {
    kvlist[i] = KeyValue{k, v}
    i++
}

sort.Sort(kvlist)

for _, kv := range kvlist {
    fmt.Println(kv.Key, kv.Value)
}
  1. 使用第三方包实现有序的 map,例如 github.com/iancoleman/orderedmap。
import (
    "fmt"
    "github.com/iancoleman/orderedmap"
)

m := orderedmap.New()
m.Set("a", "apple")
m.Set("b", "banana")
m.Set("c", "cat")

for _, key := range m.Keys() {
    fmt.Println(key, m.Get(key.(string)))
}

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=5033

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?