ZBLOG

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

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

  1. 使用 slice 存储 map 的 key,并对 key 进行排序,然后遍历 slice 获取对应的 value。
  1. m := map[string]string{
  2. "a": "apple",
  3. "b": "banana",
  4. "c": "cat",
  5. }
  6. keys := make([]string, len(m))
  7. i := 0
  8. for k := range m {
  9. keys[i] = k
  10. i++
  11. }
  12. sort.Strings(keys)
  13. for _, k := range keys {
  14. fmt.Println(k, m[k])
  15. }
  1. 使用结构体存储 map 的 key 和 value,并对结构体进行排序,然后遍历结构体获取值。
  1. type KeyValue struct {
  2. Key string
  3. Value string
  4. }
  5. type KeyValueList []KeyValue
  6. func (kvl KeyValueList) Len() int { return len(kvl) }
  7. func (kvl KeyValueList) Less(i, j int) bool { return kvl[i].Key < kvl[j].Key }
  8. func (kvl KeyValueList) Swap(i, j int) { kvl[i], kvl[j] = kvl[j], kvl[i] }
  9. m := map[string]string{
  10. "a": "apple",
  11. "b": "banana",
  12. "c": "cat",
  13. }
  14. kvlist := make(KeyValueList, len(m))
  15. i := 0
  16. for k, v := range m {
  17. kvlist[i] = KeyValue{k, v}
  18. i++
  19. }
  20. sort.Sort(kvlist)
  21. for _, kv := range kvlist {
  22. fmt.Println(kv.Key, kv.Value)
  23. }
  1. 使用第三方包实现有序的 map,例如 github.com/iancoleman/orderedmap。
  1. import (
  2. "fmt"
  3. "github.com/iancoleman/orderedmap"
  4. )
  5. m := orderedmap.New()
  6. m.Set("a", "apple")
  7. m.Set("b", "banana")
  8. m.Set("c", "cat")
  9. for _, key := range m.Keys() {
  10. fmt.Println(key, m.Get(key.(string)))
  11. }

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?