GO中對map排序的實(shí)現(xiàn)
前言
GO語言中,map是哈希表,能夠?qū)⑻囟愋偷膋ey映射到特定類型的Value上。在查詢Map里面的內(nèi)容時,其時間復(fù)雜度為O(1)非常高效。但其存儲并不是線性的,遍歷輸出時,也沒有順序可言。如果需要按順序的輸出map中的元素,就需要借助其他數(shù)據(jù)結(jié)構(gòu)的幫助。
按照需求,本文分別提供了按Key順序輸出map、按Value順序輸出map兩種方法。
按Key順序輸出map
思路就是,先將key存儲下來進(jìn)行排序,然后按照排序后的順序依次訪問map,得到排序后的結(jié)果:
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) ?? ?//輸出結(jié)果 ?? ?fmt.Println("sort:") ?? ?for _, v := range ks { ?? ??? ?fmt.Println(v, m[v]) ?? ?} }
按Value順序輸出map
思路就是,先將map中的值,存儲到一個結(jié)構(gòu)體中,然后將結(jié)構(gòu)體實(shí)現(xiàn)Sort接口實(shí)現(xiàn)排序,再輸出結(jié)果,代碼如下:
package main import ( ?? ?"fmt" ?? ?"sort" ) //定義結(jié)構(gòu)體存放map值 type temp struct { ?? ?k int ?? ?v int } type temps []temp // ?實(shí)現(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) ?? ?//輸出結(jié)果 ?? ?fmt.Println("sort:") ?? ?for _, v := range ts { ?? ??? ?fmt.Println(v.k, v.v) ?? ?} }
到此這篇關(guān)于GO中對map排序的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)GO map排序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
golang語言如何將interface轉(zhuǎn)為int, string,slice,struct等類型
這篇文章主要介紹了golang語言如何將interface轉(zhuǎn)為int, string,slice,struct等類型,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12Golang中String,rune和byte的相互轉(zhuǎn)換
Go語言中,string就是只讀的采用utf8編碼的字節(jié)切片,rune是int32的別名,代表字符的Unicode編碼,這篇文章主要介紹了Golang中String,rune和byte的相互轉(zhuǎn)換,感興趣的小伙伴可以了解一下2023-10-10go語言 swagger 查詢 json 字段注釋的示例代碼
在Go語言中,使用Swagger通過swag工具和gin-gonic框架生成API文檔,涉及引入依賴、定義模型、添加注釋等步驟,示例中展示了如何為接受查詢參數(shù)的API端點(diǎn)添加注釋,感興趣的朋友跟隨小編一起看看吧2024-09-09詳解Golang利用反射reflect動態(tài)調(diào)用方法
這篇文章主要介紹了詳解Golang利用反射reflect動態(tài)調(diào)用方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-11-11Golang項(xiàng)目搭配nginx部署反向代理負(fù)載均衡講解
這篇文章主要為大家介紹了Golang項(xiàng)目搭配nginx部署正反向代理負(fù)載均衡講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04Golang中基礎(chǔ)的命令行模塊urfave/cli的用法說明
這篇文章主要介紹了Golang中基礎(chǔ)的命令行模塊urfave/cli的用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12在Linux系統(tǒng)中安裝Go語言的詳細(xì)教程
這篇文章主要介紹了在Linux系統(tǒng)中安裝Go語言的詳細(xì)教程,由于國內(nèi)很多人對谷歌的盲目追捧,導(dǎo)致Go語言在國內(nèi)的人氣遠(yuǎn)超國外...需要的朋友可以參考下2015-06-06