GO中對map排序的實現(xiàn)
前言
GO語言中,map是哈希表,能夠將特定類型的key映射到特定類型的Value上。在查詢Map里面的內容時,其時間復雜度為O(1)非常高效。但其存儲并不是線性的,遍歷輸出時,也沒有順序可言。如果需要按順序的輸出map中的元素,就需要借助其他數(shù)據(jù)結構的幫助。
按照需求,本文分別提供了按Key順序輸出map、按Value順序輸出map兩種方法。
按Key順序輸出map
思路就是,先將key存儲下來進行排序,然后按照排序后的順序依次訪問map,得到排序后的結果:
package main
import (
?? ?"fmt"
?? ?"sort"
)
func main() {
?? ?m := make(map[int]int)
?? ?m[2] = 5
?? ?m[3] = 7
?? ?m[1] = 6
?? ?m[10] = 22
?? ?m[8] = 9
?? ?m[4] = 7
?? ?fmt.Println("not sort:")
?? ?for k, v := range m {
?? ??? ?fmt.Println(k, v)
?? ?}
?? ?// 得到key值
?? ?var ks []int
?? ?for k, _ := range m {
?? ??? ?ks = append(ks, k)
?? ?}
?? ?//對key排序
?? ?sort.Ints(ks)
?? ?//輸出結果
?? ?fmt.Println("sort:")
?? ?for _, v := range ks {
?? ??? ?fmt.Println(v, m[v])
?? ?}
}按Value順序輸出map
思路就是,先將map中的值,存儲到一個結構體中,然后將結構體實現(xiàn)Sort接口實現(xiàn)排序,再輸出結果,代碼如下:
package main
import (
?? ?"fmt"
?? ?"sort"
)
//定義結構體存放map值
type temp struct {
?? ?k int
?? ?v int
}
type temps []temp
// ?實現(xiàn)sort包中Interface接口
func (t temps) Len() int {
?? ?return len(t)
}
func (t temps) Less(i, j int) bool {
?? ?return t[i].v < t[j].v
}
func (t temps) Swap(i, j int) {
?? ?t[i], t[j] = t[j], t[i]
}
func main() {
?? ?m := make(map[int]int)
?? ?m[2] = 5
?? ?m[3] = 7
?? ?m[1] = 6
?? ?m[10] = 22
?? ?m[8] = 9
?? ?m[4] = 7
?? ?fmt.Println("not sort:")
?? ?for k, v := range m {
?? ??? ?fmt.Println(k, v)
?? ?}
?? ?// 得到key值
?? ?var ts temps
?? ?for k, v := range m {
?? ??? ?ts = append(ts, temp{k: k, v: v})
?? ?}
?? ?//對key排序
?? ?sort.Sort(ts)
?? ?//輸出結果
?? ?fmt.Println("sort:")
?? ?for _, v := range ts {
?? ??? ?fmt.Println(v.k, v.v)
?? ?}
}到此這篇關于GO中對map排序的實現(xiàn)的文章就介紹到這了,更多相關GO map排序內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
golang語言如何將interface轉為int, string,slice,struct等類型
這篇文章主要介紹了golang語言如何將interface轉為int, string,slice,struct等類型,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12
go語言 swagger 查詢 json 字段注釋的示例代碼
在Go語言中,使用Swagger通過swag工具和gin-gonic框架生成API文檔,涉及引入依賴、定義模型、添加注釋等步驟,示例中展示了如何為接受查詢參數(shù)的API端點添加注釋,感興趣的朋友跟隨小編一起看看吧2024-09-09
詳解Golang利用反射reflect動態(tài)調用方法
這篇文章主要介紹了詳解Golang利用反射reflect動態(tài)調用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2018-11-11
Golang中基礎的命令行模塊urfave/cli的用法說明
這篇文章主要介紹了Golang中基礎的命令行模塊urfave/cli的用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12

