成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > golang對自定義類型進(jìn)行排序的解決方法

golang對自定義類型進(jìn)行排序的解決方法

熱門標(biāo)簽:建造者2地圖標(biāo)注 汕頭小型外呼系統(tǒng) 濱州自動電銷機(jī)器人排名 鄭州亮點(diǎn)科技用的什么外呼系統(tǒng) 浙江高頻外呼系統(tǒng)多少錢一個月 惠州電銷防封電話卡 阿里云ai電話機(jī)器人 釘釘有地圖標(biāo)注功能嗎 黃岡人工智能電銷機(jī)器人哪個好

前言

Go 語言支持我們自定義類型,我們大家在實(shí)際項(xiàng)目中,常常需要根據(jù)一個結(jié)構(gòu)體類型的某個字段進(jìn)行排序。之前遇到這個問題不知道如何解決,后來在網(wǎng)上搜索了相關(guān)問題,找到了一些好的解決方案,此處參考下,做個總結(jié)吧。

由于 golang 的 sort 包本身就提供了相應(yīng)的功能, 我們就沒必要重復(fù)的造個輪子了,來看看如何利用 sort 包來實(shí)現(xiàn)吧。

sort包淺談

golang中也實(shí)現(xiàn)了排序算法的包sort包,sort 包 在內(nèi)部實(shí)現(xiàn)了四種基本的排序算法:插入排序(insertionSort)、歸并排序(symMerge)、堆排序(heapSort)和快速排序(quickSort); sort 包會依據(jù)實(shí)際數(shù)據(jù)自動選擇最優(yōu)的排序算法。

所以我們寫代碼時只需要考慮實(shí)現(xiàn) sort.Interface 這個類型就可以了。

粗略的看看sort包

func Sort(data Interface) {
 // Switch to heapsort if depth of 2*ceil(lg(n+1)) is reached.
 n := data.Len()
 maxDepth := 0
 for i := n; i > 0; i >>= 1 {
 maxDepth++
 }
 maxDepth *= 2
 quickSort(data, 0, n, maxDepth)
}
type Interface interface {
 // Len is the number of elements in the collection.
 Len() int
 // Less reports whether the element with
 // index i should sort before the element with index j.
 Less(i, j int) bool
 // Swap swaps the elements with indexes i and j.
 Swap(i, j int)
}
// 內(nèi)部實(shí)現(xiàn)的四種排序算法
// 插入排序
func insertionSort(data Interface, a, b int)
// 堆排序
func heapSort(data Interface, a, b int)
// 快速排序
func quickSort(data Interface, a, b, maxDepth int)
// 歸并排序
func symMerge(data Interface, a, m, b int)

所以要調(diào)用sort.Sort() 來實(shí)現(xiàn)自定義類型排序,只需要我們的類型實(shí)現(xiàn) Interface 接口類型中的三個方法即可。

先看看 sort 包本身對于 []int 類型如何排序

// 首先定義了一個[]int類型的別名IntSlice 
type IntSlice []int
// 獲取此 slice 的長度
func (p IntSlice) Len() int   { return len(p) }
// 比較兩個元素大小 升序
func (p IntSlice) Less(i, j int) bool { return p[i]  p[j] }
// 交換數(shù)據(jù)
func (p IntSlice) Swap(i, j int)  { p[i], p[j] = p[j], p[i] }
// sort.Ints()內(nèi)部調(diào)用Sort() 方法實(shí)現(xiàn)排序
// 注意 要先將[]int 轉(zhuǎn)換為 IntSlice類型 因?yàn)榇祟愋筒艑?shí)現(xiàn)了Interface的三個方法 
func Ints(a []int) { Sort(IntSlice(a)) }

照葫蘆畫瓢 我們來對自定義的結(jié)構(gòu)體類型進(jìn)行降序排序

package main
import (
 "fmt"
 "sort"
)
type Person struct {
 Name string
 Age int
}
type Persons []Person
// 獲取此 slice 的長度
func (p Persons) Len() int { return len(p) }
// 根據(jù)元素的年齡降序排序 (此處按照自己的業(yè)務(wù)邏輯寫) 
func (p Persons) Less(i, j int) bool {
 return p[i].Age > p[j].Age
}
// 交換數(shù)據(jù)
func (p Persons) Swap(i, j int) { p[i], p[j] = p[j], p[i] }
func main() {
 persons := Persons{
 {
 Name: "test1",
 Age: 20,
 },
 {
 Name: "test2",
 Age: 22,
 },
 {
 Name: "test3",
 Age: 21,
 },
 }
 fmt.Println("排序前")
 for _, person := range persons {
 fmt.Println(person.Name, ":", person.Age)
 }
 sort.Sort(persons)
 fmt.Println("排序后")
 for _, person := range persons {
 fmt.Println(person.Name, ":", person.Age)
 }
}

其實(shí),一般 Len()Swap() 基本不做改變,只有涉及到元素比較的 Less() 方法會有所改變。

當(dāng)我們對某一個結(jié)構(gòu)體中多個字段進(jìn)行排序時怎么辦,難道每排序一個就寫下這三個方法么,當(dāng)然不是。我們可以利用嵌套結(jié)構(gòu)體來解決這個問題。因?yàn)榍短捉Y(jié)構(gòu)體可以繼承父結(jié)構(gòu)體的所有屬性和方法

比如我想對上面 Person 的 Name 字段和 Age 對要排序,我們可以利用嵌套結(jié)構(gòu)體來改進(jìn)一下。

package main
import (
 "fmt"
 "sort"
)
type Person struct {
 Name string
 Age int
}
type Persons []Person
// Len()方法和Swap()方法不用變化
// 獲取此 slice 的長度
func (p Persons) Len() int { return len(p) }
// 交換數(shù)據(jù)
func (p Persons) Swap(i, j int) { p[i], p[j] = p[j], p[i] }
// 嵌套結(jié)構(gòu)體 將繼承 Person 的所有屬性和方法
// 所以相當(dāng)于SortByName 也實(shí)現(xiàn)了 Len() 和 Swap() 方法
type SortByName struct{ Persons }
// 根據(jù)元素的姓名長度降序排序 (此處按照自己的業(yè)務(wù)邏輯寫)
func (p SortByName) Less(i, j int) bool {
 return len(p.Persons[i].Name) > len(p.Persons[j].Name)
}
type SortByAge struct{ Persons }
// 根據(jù)元素的年齡降序排序 (此處按照自己的業(yè)務(wù)邏輯寫)
func (p SortByAge) Less(i, j int) bool {
 return p.Persons[i].Age > p.Persons[j].Age
}
func main() {
 persons := Persons{
 {
 Name: "test123",
 Age: 20,
 },
 {
 Name: "test1",
 Age: 22,
 },
 {
 Name: "test12",
 Age: 21,
 },
 }
 fmt.Println("排序前")
 for _, person := range persons {
 fmt.Println(person.Name, ":", person.Age)
 }
 sort.Sort(SortByName{persons})
 fmt.Println("排序后")
 for _, person := range persons {
 fmt.Println(person.Name, ":", person.Age)
 }
}

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

您可能感興趣的文章:
  • Golang中的自定義函數(shù)詳解
  • Go語言之自定義集合Set
  • goLang引入自定義包的方法

標(biāo)簽:阿壩 泰安 滄州 瀘州 昭通 東營 晉中 駐馬店

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《golang對自定義類型進(jìn)行排序的解決方法》,本文關(guān)鍵詞  golang,對,自定義,類型,進(jìn)行,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《golang對自定義類型進(jìn)行排序的解決方法》相關(guān)的同類信息!
  • 本頁收集關(guān)于golang對自定義類型進(jìn)行排序的解決方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    手机在线视频一区| 国产精品久久久久久久无码| 开心激情五月婷婷| xxxx视频在线| 日本少妇全体裸体洗澡| 精品久久久久亚洲| 国产午夜精品美女毛片视频| 精品一区二区三区在线观看| 国产精品久久久一本精品| 秋霞成人午夜伦在线观看| 91短视频推广| 成人黄色电影在线| 日本福利视频| 69久久精品无码一区二区| 欧美日韩一道本| 国产精品制服诱惑| 亚洲一区中文字幕在线观看| 国产亚洲一本大道中文在线| 色偷偷网友自拍| 国产福利免费观看| 日韩中文一区二区三区| 四虎永久在线高清国产精品| 天堂av在线网站| 97久久超碰福利国产精品…| 亚洲av无码一区二区三区dv| 两个人免费视频观看日本| 伊人久久高清| 日本三级免费网站| 亚洲经典视频在线观看| 精品一区二区在线欧美日韩| 国产夫绿帽单男3p精品视频| 欧美日韩免费| 欧美大片网站| 色妇色综合久久夜夜| 久久福利电影| 男人日女人的bb| 欧美中文字幕不卡| 韩国av一区二区三区四区| 日韩毛片中文字幕| 性欧美freesex顶级少妇| 国产浴室偷窥在线播放| 最近中文字幕在线6| 2022国产精品| 日韩欧美国产网站| 中文字幕不卡的av| 亚洲国产美女视频| 成人av一区二区三区| 黄色在线免费| 精品亚洲va在线va天堂资源站| 亚洲免费一区三区| 日本日本精品二区免费| 亚洲成人av在线播放| 黄页免费在线观看视频| 天堂资源在线亚洲| 国产精品99久久久久久www| 久久综合九色99| 欧美黄色一区二区| 电影在线一区| 欧美丝袜在线观看| 日韩你懂的电影在线观看| 在线一区二区视频| 中文幕av一区二区三区佐山爱| 国精产品一区一区三区免费视频| 久久精品99久久久香蕉| 日日噜噜夜夜狠狠| 99re6热在线精品视频播放速度| 午夜精品一区二区三区在线视频| 国产精品美女毛片真酒店| 免费中文字幕在线观看| 日韩欧美少妇| 欧美精品videossex变态| 免费观看一区二区三区| 黄色大片在线免费观看| av福利导福航大全在线播放| 日本在线精品视频| 国产日韩欧美一区二区三区四区| 免费av网站在线看| 波多野结衣亚洲一二三| 美女在线视频一区二区| 日韩一区二区中文| 青青草久久伊人| 极品粉嫩美女露脸啪啪| 国产精品成久久久久| 91精品在线观| 在线成人高清不卡| 污污免费在线观看| 日韩激情中文字幕| 26uuu久久综合| 日日干日日操日日射| 黄色免费影视| 国产精品久久久久久久久免费桃花| 中文乱码字幕高清一区二区| 午夜成人亚洲理伦片在线观看| 精品一区电影| 免费成人黄色网址| 国内成人自拍视频| 日本久久91av| 无码日韩精品一区二区免费| 久久婷婷久久一区二区三区| 99国产在线视频| 精品免费国产一区二区| 青青草综合在线| 捆绑变态av一区二区三区| 亚洲国产精品无码久久久| 91丝袜超薄交口足| 精品无人区麻豆乱码久久久| 涩爱av色老久久精品偷偷鲁| 亚洲图片欧美视频| 影音欧美亚洲| 三区四区电影在线观看| 免费观看日韩毛片| 先锋影音在av资源看片| 亚洲女人天堂网| 国产精品一区二区女厕厕| 一区二区国产精品精华液| 亚洲二区中文字幕| 懂色av一区二区三区四区五区| 国产精品一区二区三区久久| 亚洲欧洲无码一区二区三区| 九色视频在线播放| a在线观看免费| 91高清免费看| 欧美性色综合| 欧美日韩免费观看中文| jizzjizzxxxx| 快播日韩欧美| 91亚洲一区| 国产99久久久国产精品潘金| 亚洲91在线| 欧美大片一区| 成码无人av片在线观看网站| 成人性生活视频| 91精品国产自产在线| 污版视频在线观看| h片在线观看视频免费免费| 亚洲电影av| 日韩 国产 一区| 国产精品美女www爽爽爽| 99成人精品视频| 日本久久综合| 中文字幕精品在线观看| av不卡在线观看| 亚洲视频分类| 成人性生交大合| 精品网站在线| 久久97人妻无码一区二区三区| 中文字幕久久午夜不卡| 狂野欧美性猛交| 三级成人黄色影院| 日本成人伦理电影| 日本一区视频在线观看免费| 国产91久久精品一区二区| 999成人精品视频线3| 美女视频免费观看网站在线| 亚洲一区二区三区四区不卡| 久久久久久久久久久久久国产精品| 理论片在线不卡免费观看| 欧美精品一区二区性色a+v| 欧美综合一区第一页| www.亚洲一区| 香蕉成人久久| 日本中文字幕亚洲| eeuss国产一区二区三区四区| 91亚洲国产成人精品一区二三| 精品国产凹凸成av人导航| 日韩在线视频在线| 天堂…中文在线最新版在线| 免费观看的黄色网址| 女性隐私黄www网站视频| 国模私拍在线观看| 日韩成人一级片| 午夜国产在线观看| 欧美激情在线一区二区| 在线观看成人毛片| 最新中文字幕第一页| www.亚洲一区二区三区| 免费高清视频精品| 日本久久精品电影| 国产精品丝袜白浆摸在线| 亚洲免费av在线| 一级 黄 色 片一| 盗摄精品av一区二区三区| 成人毛片免费| 欧美精品性视频| 成年人视频网站免费观看| 欧美日韩国产三级| 国产日韩欧美成人| 在线观看av网站永久| 亚洲欧美日本在线观看| 国产欧美在线播放| xxxx18hd亚洲hd捆绑| 精品国产一区二区三区免费| 午夜精品一区二区三区视频免费看| av小次郎在线| 中文无码精品一区二区三区| 色哟哟在线观看一区二区三区| 欧美日韩国产一区二区三区| 国产精品正在播放| 国产精品午夜一区二区三区| 在线看的黄色网址| 国产欧美一区二区三区在线看| 久久久久久久久一| 国产性生活免费视频| 欧美在线观看视频一区二区| 亚洲三区在线观看无套内射| 欧美性jizz18性欧美| 色综合久久99| 久久综合国产精品台湾中文娱乐网| 韩国成人一区| 中文字幕高清视频| 久久美女视频| 99精品视频在线免费观看| av一区二区三区免费| 久久一二三国产| 黄色片免费在线| 色综合色综合色综合| 欧美成人午夜剧场免费观看| 区日韩二区欧美三区| 欧美系列在线观看| 97精品人妻一区二区三区| 免费中国女人69xxxxx视频| 久久精品五月| 亚洲一级片在线看| 久久精品99国产精品酒店日本| 欧美wwww| 国产中文第一页| 97超视频在线观看| 丁香视频五月| 在线激情av| a视频在线观看| av免费看大片| 国产福利一区二区三区在线观看| 日韩黄色在线| 丰满少妇又爽又紧又丰满69| 99国产在线观看| 岛国片免费观看| 欧美变态凌虐bdsm| 国产日韩欧美中文| 黄污在线观看| 久久免费午夜影院| 欧美日韩国产欧美日美国产精品| 欧美日韩国产成人在线| 色老板在线视频一区二区| 青青草av免费在线观看| 蜜桃极品自拍av| 午夜欧美大尺度福利影院在线看| 色婷婷久久99综合精品jk白丝| 美国黑人一级大黄| jvid一区二区三区| 狠狠操视频网| 三级在线观看免费大全| 2020国产精品久久精品不卡| 日本久久精品视频| 日韩福利一区| 亚洲激情男女视频| 99伊人成综合| 日韩av久操| 久久久久久久久久久久久久av| 在线播放三级网站| 国产69精品久久久久99| 日韩一区在线视频| 日本韩国欧美中文字幕| 99久久人妻无码中文字幕系列| 国产福利视频在线观看| 国产91高潮流白浆在线麻豆| 中文字幕在线免费看线人| 久久精品国产99久久| 精品区一区二区| 国产精品久久久久久久免费大片| 成人综合婷婷国产精品久久| 全网免费在线播放视频入口| av在线播放亚洲| 欧美日韩1234| 亚洲国产精一区二区三区性色| 国产xxxx在线观看| 欧美另类交视频| 在线观看欧美| 午夜精品久久久久久久久| 一区二区三区四区在线视频| 国产精品网友自拍| 亚洲第一激情av| 欧美一区二区三区人| 亚洲h色精品| www.xxxx国产| 九色.com| 洋洋成人永久网站入口| 91大神免费观看| 国产高潮流白浆喷水视频| 国产高清无密码一区二区三区| 97人人做人人爽香蕉精品| 午夜成人鲁丝片午夜精品| 日韩电影中文 亚洲精品乱码| 亚洲精品国产精华液| 国产精品理论片在线观看| 午夜一区在线观看| 青青青国产精品| 99精品99| 国产成人av在线播放| 国产二区视频在线播放| 午夜一区在线观看| 亚洲免费av片| 欧美偷拍综合| 成a人片亚洲日本久久| 国产视频一区二区三区在线播放| 欧美性猛交xxxx黑人| 日韩avvvv在线播放| 国产日韩欧美精品在线观看| 亚洲最大福利视频网站| 国产l精品国产亚洲区久久| 1024手机在线视频| 国产九色91| 欧美亚洲另类久久综合| 狠狠色综合久久婷婷| 日韩电影视频免费| av大全在线免费看| 91蜜桃在线免费视频| 538任你躁在线精品免费| 色黄视频在线观看| 欧美黄色免费在线观看| 免费人成网站在线观看欧美高清| 国产自产自拍视频在线观看| 椎名由奈av一区二区三区| 天码人妻一区二区三区在线看| 好吊视频一区二区三区| 国产成人精品一区二三区| 一区二区日韩视频| 亚洲综合精品国产一区二区三区| www.欧美激情.com|