Go 入门指南:8.5. map 的排序

 

原创 吃个大西瓜 Coding Big Tree
 

图片

map 默认是无序的,不管是按照 key 还是按照 value 默认都不排序(详见第 8.3 节)。

如果你想为 map 排序,需要将 key(或者 value)拷贝到一个切片,再对切片排序(使用 sort 包,详见第 7.6.6 节),然后可以使用切片的 for-range 方法打印出所有的 key 和 value。

下面有一个示例:

示例 8.6 sort_map.go:

// the telephone alphabet:
package main
import (
 "fmt"
 "sort"
)

var (
 barVal = map[string]int{"alpha"34"bravo"56"charlie"23,
       "delta"87"echo"56"foxtrot"12,
       "golf"34"hotel"16"indio"87,
       "juliet"65"kili"43"lima"98}
)

func main() {
 fmt.Println("unsorted:")
 for k, v := range barVal {
  fmt.Printf("Key: %v, Value: %v / ", k, v)
 }
 keys := make([]stringlen(barVal))
 i := 0
 for k, _ := range barVal {
  keys[i] = k
  i++
 }
 sort.Strings(keys)
 fmt.Println()
 fmt.Println("sorted:")
 for _, k := range keys {
  fmt.Printf("Key: %v, Value: %v / ", k, barVal[k])
 }
}

输出结果:

unsorted:
Key: bravo, Value: 56 / Key: echo, Value: 56 / Key: indio, Value: 87 / Key: juliet, Value: 65 / Key: alpha, Value: 34 / Key: charlie, Value: 23 / Key: delta, Value: 87 / Key: foxtrot, Value: 12 / Key: golf, Value: 34 / Key: hotel, Value: 16 / Key: kili, Value: 43 / Key: lima, Value: 98 /
sorted:
Key: alpha, Value: 34 / Key: bravo, Value: 56 / Key: charlie, Value: 23 / Key: delta, Value: 87 / Key: echo, Value: 56 / Key: foxtrot, Value: 12 / Key: golf, Value: 34 / Key: hotel, Value: 16 / Key: indio, Value: 87 / Key: juliet, Value: 65 / Key: kili, Value: 43 / Key: lima, Value: 98 /

但是如果你想要一个排序的列表你最好使用结构体切片,这样会更有效:

type name struct {
 key string
 value int
}

文章来源

https://learnku.com/docs/the-way-to-go/the-sorting-of-85-map/3623

图片

公众号回复:

golang加群】加入golang开发者交流群

golang资料】获取golang面试刷题资料

 

golang · 目录
上一篇Go 入门指南:8.4. map 类型的切片
阅读 172
 
写留言
 
 
 
 
 
 
 
 
写留言
留言
 

暂无留言

posted @   技术颜良  阅读(32)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
点击右上角即可分享
微信分享提示