亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Go語(yǔ)言中排序的3種實(shí)現(xiàn)方法

 更新時(shí)間:2023年08月15日 10:32:40   作者:AlwaysBeta  
在寫(xiě)代碼過(guò)程中,排序是經(jīng)常會(huì)遇到的需求,這篇文章主要為大家介紹三種常用的方法,文中的示例代碼簡(jiǎn)潔易懂,需要的小伙伴可以參考下

在寫(xiě)代碼過(guò)程中,排序是經(jīng)常會(huì)遇到的需求,本文會(huì)介紹三種常用的方法。

廢話不多說(shuō),下面正文開(kāi)始。

使用標(biāo)準(zhǔn)庫(kù)

根據(jù)場(chǎng)景直接使用標(biāo)準(zhǔn)庫(kù)中的方法,比如:

  • sort.Ints
  • sort.Float64s
  • sort.Strings

舉個(gè)例子:

s?:=?[]int{4,?2,?3,?1}
sort.Ints(s)
fmt.Println(s)?//?[1?2?3?4]

自定義比較器

使用 sort.Slice 方法排序時(shí),可以自定義比較函數(shù) less(i, j int) bool,這樣就可以根據(jù)需要按不同的字段進(jìn)行排序。

如果想要穩(wěn)定排序的話,就使用 sort.SliceStable 方法。

舉個(gè)例子:

family?:=?[]struct?{
????Name?string
????Age??int
}{
????{"Alice",?23},
????{"David",?2},
????{"Eve",?2},
????{"Bob",?25},
}
//?Sort?by?age,?keeping?original?order?or?equal?elements.
sort.SliceStable(family,?func(i,?j?int)?bool?{
????return?family[i].Age?<?family[j].Age
})
fmt.Println(family)?//?[{David?2}?{Eve?2}?{Alice?23}?{Bob?25}]

自定義數(shù)據(jù)結(jié)構(gòu)

使用 sort.Sort 或者 sort.Stable 方法,它們可以對(duì)任意實(shí)現(xiàn)了 sort.Interface 的數(shù)據(jù)結(jié)構(gòu)排序。

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)
}

意思就是說(shuō),只要某一個(gè)數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)了 Len() int,Less(i, j int) bool 和 Swap(i, j int) 這三個(gè)方法,那么就可以使用 sort.Sort 來(lái)排序。

舉個(gè)例子:

type?Person?struct?{
????Name?string
????Age??int
}
//?ByAge?implements?sort.Interface?based?on?the?Age?field.
type?ByAge?[]Person
func?(a?ByAge)?Len()?int???????????{?return?len(a)?}
func?(a?ByAge)?Less(i,?j?int)?bool?{?return?a[i].Age?<?a[j].Age?}
func?(a?ByAge)?Swap(i,?j?int)??????{?a[i],?a[j]?=?a[j],?a[i]?}
func?main()?{
????family?:=?[]Person{
????????{"Alice",?23},
????????{"Eve",?2},
????????{"Bob",?25},
????}
????sort.Sort(ByAge(family))
????fmt.Println(family)?//?[{Eve?2}?{Alice?23}?{Bob?25}]
}

字典排序

我們都知道,字典是無(wú)序的,具體原因可以看之前寫(xiě)的這篇文章 Go 語(yǔ)言 map 如何順序讀?。?/a>

如果想要字典按 key 或者 value 排序的話,可以這樣做。

m?:=?map[string]int{"Alice":?2,?"Cecil":?1,?"Bob":?3}
keys?:=?make([]string,?0,?len(m))
for?k?:=?range?m?{
????keys?=?append(keys,?k)
}
sort.Strings(keys)
for?_,?k?:=?range?keys?{
????fmt.Println(k,?m[k])
}
//?Output:
//?Alice?2
//?Bob?3
//?Cecil?1

到此這篇關(guān)于Go語(yǔ)言中排序的3種實(shí)現(xiàn)方法的文章就介紹到這了,更多相關(guān)Go排序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go語(yǔ)言集成mysql驅(qū)動(dòng)、調(diào)用數(shù)據(jù)庫(kù)、查詢(xún)數(shù)據(jù)操作示例

    Go語(yǔ)言集成mysql驅(qū)動(dòng)、調(diào)用數(shù)據(jù)庫(kù)、查詢(xún)數(shù)據(jù)操作示例

    這篇文章主要介紹了Go語(yǔ)言集成mysql驅(qū)動(dòng)、調(diào)用數(shù)據(jù)庫(kù)、查詢(xún)數(shù)據(jù)操作,結(jié)合實(shí)例形式分析了Go語(yǔ)言安裝mysql驅(qū)動(dòng)包、連接mysql數(shù)據(jù)庫(kù)及查詢(xún)等相關(guān)操作技巧,需要的朋友可以參考下
    2019-06-06
  • Go語(yǔ)言Gin框架獲取請(qǐng)求參數(shù)的兩種方式

    Go語(yǔ)言Gin框架獲取請(qǐng)求參數(shù)的兩種方式

    在添加路由處理函數(shù)之后,就可以在路由處理函數(shù)中編寫(xiě)業(yè)務(wù)處理代碼了,而編寫(xiě)業(yè)務(wù)代碼第一件事一般就是獲取HTTP請(qǐng)求的參數(shù)吧,Gin框架在net/http包的基礎(chǔ)上封裝了獲取參數(shù)的方式,本文小編給大家介紹了獲取參數(shù)的兩種方式,需要的朋友可以參考下
    2024-01-01
  • Go Sentinel 動(dòng)態(tài)數(shù)據(jù)源配置指南(示例詳解)

    Go Sentinel 動(dòng)態(tài)數(shù)據(jù)源配置指南(示例詳解)

    本文介紹了如何使用Go語(yǔ)言配置Sentinel的動(dòng)態(tài)數(shù)據(jù)源,并通過(guò)本地文件和Nacos兩種方式實(shí)現(xiàn)動(dòng)態(tài)配置,通過(guò)這種方式,可以靈活地管理和更新限流規(guī)則,提升系統(tǒng)的穩(wěn)定性和響應(yīng)速度,感興趣的朋友跟隨小編一起看看吧
    2025-01-01
  • 如何在Go中使用切片容量和長(zhǎng)度

    如何在Go中使用切片容量和長(zhǎng)度

    這篇文章主要介紹了如何在Go中使用切片容量和長(zhǎng)度,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Golang使用WebSocket通信的實(shí)現(xiàn)

    Golang使用WebSocket通信的實(shí)現(xiàn)

    這篇文章主要介紹了Golang使用WebSocket通信的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Go基本數(shù)據(jù)類(lèi)型的具體使用

    Go基本數(shù)據(jù)類(lèi)型的具體使用

    本文主要介紹了Go的基本數(shù)據(jù)類(lèi)型,包括布爾類(lèi)型、整數(shù)類(lèi)型、浮點(diǎn)數(shù)類(lèi)型、復(fù)數(shù)類(lèi)型、字符串類(lèi)型,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-11-11
  • Go模塊布局管理文檔翻譯理解

    Go模塊布局管理文檔翻譯理解

    這篇文章主要為大家介紹了Go模塊布局管理文檔翻譯理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Golang?使用os?庫(kù)的?ReadFile()?讀文件最佳實(shí)踐

    Golang?使用os?庫(kù)的?ReadFile()?讀文件最佳實(shí)踐

    這篇文章主要介紹了Golang使用os庫(kù)的ReadFile()讀文件最佳實(shí)踐,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • golang切片內(nèi)存應(yīng)用技巧詳解

    golang切片內(nèi)存應(yīng)用技巧詳解

    這篇文章主要介紹了golang切片內(nèi)存應(yīng)用技巧詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Golang中的time.Duration類(lèi)型用法說(shuō)明

    Golang中的time.Duration類(lèi)型用法說(shuō)明

    這篇文章主要介紹了Golang中的time.Duration類(lèi)型用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12

最新評(píng)論