最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

廢話不多說,下面正文開始。

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

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

  • 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 方法,它們可以對任意實(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)
}

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

舉個(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}]
}

字典排序

我們都知道,字典是無序的,具體原因可以看之前寫的這篇文章 Go 語言 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語言中排序的3種實(shí)現(xiàn)方法的文章就介紹到這了,更多相關(guān)Go排序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go語言執(zhí)行系統(tǒng)命令行命令的方法

    Go語言執(zhí)行系統(tǒng)命令行命令的方法

    這篇文章主要介紹了Go語言執(zhí)行系統(tǒng)命令行命令的方法,實(shí)例分析了Go語言操作系統(tǒng)命令行的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02
  • Golang 1.16 中 Modules的主要變化更新

    Golang 1.16 中 Modules的主要變化更新

    這篇文章主要介紹了Golang 1.16 中 Modules的主要變化更新,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • Go中time.RFC3339 時(shí)間格式化的實(shí)現(xiàn)

    Go中time.RFC3339 時(shí)間格式化的實(shí)現(xiàn)

    這篇文章主要介紹了Go中time.RFC3339 時(shí)間格式化的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Go?代碼塊作用域變量遮蔽問題解析

    Go?代碼塊作用域變量遮蔽問題解析

    這篇文章主要為大家介紹了Go?代碼塊作用域變量遮蔽問題解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • 淺談Golang?Slice切片如何擴(kuò)容的實(shí)現(xiàn)

    淺談Golang?Slice切片如何擴(kuò)容的實(shí)現(xiàn)

    本文主要介紹了淺談Golang?Slice切片如何擴(kuò)容的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • go語言中的二維切片賦值

    go語言中的二維切片賦值

    這篇文章主要介紹了go語言中的二維切片賦值操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • Go引用github包的詳細(xì)流程步驟

    Go引用github包的詳細(xì)流程步驟

    這篇文章主要給大家介紹了關(guān)于Go引用github包的詳細(xì)流程步驟,文中通過圖文介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Go具有一定的參考價(jià)值,需要的朋友可以參考下
    2024-02-02
  • Golang項(xiàng)目在github創(chuàng)建release后自動生成二進(jìn)制文件的方法

    Golang項(xiàng)目在github創(chuàng)建release后自動生成二進(jìn)制文件的方法

    這篇文章主要介紹了Golang項(xiàng)目在github創(chuàng)建release后如何自動生成二進(jìn)制文件,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • Go語言結(jié)構(gòu)體的使用小結(jié)

    Go語言結(jié)構(gòu)體的使用小結(jié)

    在Go語言中,結(jié)構(gòu)體是一種自定義的數(shù)據(jù)類型,它包含了一系列命名的數(shù)據(jù)字段, 下面就來詳細(xì)的介紹一下Go語言結(jié)構(gòu)體的使用,感興趣的可以了解一下
    2025-12-12
  • Go中基本數(shù)據(jù)類型和字符串表示之間轉(zhuǎn)換詳解

    Go中基本數(shù)據(jù)類型和字符串表示之間轉(zhuǎn)換詳解

    這篇文章主要為大家詳細(xì)介紹了Go中基本數(shù)據(jù)類型和字符串表示之間轉(zhuǎn)換的相關(guān)知識,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01

最新評論

安新县| 延吉市| 越西县| 衡南县| 确山县| 乐至县| 顺平县| 大荔县| 湟中县| 石台县| 和硕县| 科技| 通化市| 金门县| 科技| 竹山县| 舒兰市| 东兴市| 扬中市| 时尚| 南京市| 商南县| 胶南市| 保靖县| 孟津县| 泾源县| 徐州市| 溧阳市| 安远县| 南昌市| 无为县| 凭祥市| 大丰市| 沂水县| 新丰县| 阿克陶县| 西青区| 寿宁县| 佛坪县| 浦县| 武清区|