Go 1.21新增的slices包中切片函數(shù)用法詳解
slices.Max
定義如下:
func Max[S ~[]E, E cmp.Ordered](x S) E
返回 x 中的最大值,如果 x 為空,則 panic。對(duì)于浮點(diǎn)數(shù) E, 如果有元素為 NaN,結(jié)果就是 NaN。簡(jiǎn)單示例如下:
package main import ( "fmt" "math" "slices" ) func main() { numbers := []int{0, 10, -1, 8} fmt.Println(slices.Max(numbers)) // 10 numbers2 := []float64{0, 10, -1, 8, math.NaN()} fmt.Println(slices.Max(numbers2)) // NaN }
slices.MaxFunc
定義如下:
func MaxFunc[S ~[]E, E any](x S, cmp func(a, b E) int) E
返回 x 中的最大值,使用 cmp 函數(shù)來(lái)比較元素,如果 x 為空,則 panic。如果根據(jù) cmp 函數(shù)計(jì)算后有多個(gè)最大元素,返回第一個(gè)。簡(jiǎn)單示例如下:
package main import ( "cmp" "fmt" "slices" ) func main() { type Person struct { Name string Age int } people := []Person{ {"Gopher", 13}, {"Alice", 55}, {"Vera", 24}, {"Bob", 55}, } firstOldest := slices.MaxFunc(people, func(a, b Person) int { return cmp.Compare(a.Age, b.Age) }) fmt.Println(firstOldest.Name) // Alice }
slices.Min
定義如下:
func Min[S ~[]E, E cmp.Ordered](x S) E
返回 x 中的最小值,如果 x 為空,則 panic。對(duì)于浮點(diǎn)數(shù) E, 如果有元素為 NaN,結(jié)果就是 NaN。簡(jiǎn)單示例如下:
package main import ( "fmt" "math" "slices" ) func main() { numbers := []int{0, 10, -1, 8} fmt.Println(slices.Min(numbers)) // -1 numbers2 := []float64{0, 10, -1, 8, math.NaN()} fmt.Println(slices.Min(numbers2)) // NaN }
slices.MinFunc
定義如下:
func MinFunc[S ~[]E, E any](x S, cmp func(a, b E) int) E
返回 x 中的最小值,使用 cmp 函數(shù)來(lái)比較元素,如果 x 為空,則 panic。如果根據(jù) cmp 函數(shù)計(jì)算后有多個(gè)最小元素,返回第一個(gè)。簡(jiǎn)單示例如下:
package main import ( "cmp" "fmt" "slices" ) func main() { type Person struct { Name string Age int } people := []Person{ {"Gopher", 13}, {"Alice", 55}, {"Vera", 24}, {"Bob", 55}, } firstYoungest := slices.MinFunc(people, func(a, b Person) int { return cmp.Compare(a.Age, b.Age) }) fmt.Println(firstYoungest.Name) // Gopher }
slices.Replace
定義如下:
func Replace[S ~[]E, E any](s S, i, j int, v ...E) S
將元素 s[i:j] 替換為給定的 v,并返回修改后的切片。如果 s[i:j] 不是 s 的一部分,則 panic。簡(jiǎn)單示例如下:
package main import ( "fmt" "slices" ) func main() { names := []string{"Alice", "Bob", "Vera", "Zac"} names = slices.Replace(names, 1, 3, "Bill", "Billie", "Cat") fmt.Println(names) // [Alice Bill Billie Cat Zac] }
slices.Reverse
定義如下:
func Reverse[S ~[]E, E any](s S)
反轉(zhuǎn)切片中的元素。簡(jiǎn)單示例如下:
package main import ( "fmt" "slices" ) func main() { names := []string{"alice", "Bob", "VERA"} slices.Reverse(names) fmt.Println(names) // [VERA Bob alice] }
slices.Sort
定義如下:
func Sort[S ~[]E, E cmp.Ordered](x S)
對(duì)有序類(lèi)型的切片進(jìn)行升序排序。對(duì)于浮點(diǎn)數(shù)類(lèi)型,NaN 排在其它值之前。簡(jiǎn)單示例如下:
package main import ( "fmt" "math" "slices" ) func main() { s1 := []int8{0, 42, -10, 8} slices.Sort(s1) fmt.Println(s1) // [-10 0 8 42] s2 := []float64{0, math.NaN(), -10, 8, math.NaN()} slices.Sort(s2) fmt.Println(s2) // [NaN NaN -10 0 8] }
slices.SortFunc
定義如下:
func SortFunc[S ~[]E, E any](x S, cmp func(a, b E) int)
按照 cmp 函數(shù)確定的升序?qū)η衅?x 進(jìn)行排序,這種排序不能保證穩(wěn)定。Cmp (a, b) 函數(shù)應(yīng)該在 a < b 時(shí)返回一個(gè)負(fù)數(shù),在 a > b 時(shí)返回一個(gè)正數(shù),在 a == b 時(shí)返回零。SortFunc 要求 cmp 函數(shù)是嚴(yán)格的弱排序類(lèi)型。簡(jiǎn)單示例如下:
package main import ( "cmp" "fmt" "slices" "strings" ) func main() { names := []string{"Bob", "alice", "VERA"} slices.SortFunc(names, func(a, b string) int { return cmp.Compare(strings.ToLower(a), strings.ToLower(b)) }) fmt.Println(names) // [alice Bob VERA] }
slices.SortStableFunc
定義如下:
func SortStableFunc[S ~[]E, E any](x S, cmp func(a, b E) int)
對(duì)切片 x 進(jìn)行排序,同時(shí)保持相等元素的原始順序,使用 cmp 以與 SortFunc 相同的方式比較元素。簡(jiǎn)單示例如下:
package main import ( "cmp" "fmt" "slices" ) func main() { type Person struct { Name string Age int } people := []Person{ {"Gopher", 13}, {"Alice", 20}, {"Bob", 24}, {"Alice", 55}, } // Stable sort by name, keeping age ordering of Alices intact slices.SortStableFunc(people, func(a, b Person) int { return cmp.Compare(a.Name, b.Name) }) fmt.Println(people) // [{Alice 20} {Alice 55} {Bob 24} {Gopher 13}] }
到此這篇關(guān)于Go 1.21新增的slices包中切片函數(shù)用法詳解的文章就介紹到這了,更多相關(guān)Go 1.21 slices包內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- MongoDB數(shù)據(jù)庫(kù)去重函數(shù)Distinct用法實(shí)例
- Golang time包中的函數(shù)用法詳解
- Go?1.21新內(nèi)置函數(shù)min、max和clear的用法詳解
- Golang?Time包與日期函數(shù)的用法詳解
- Golang?中的?strconv?包常用函數(shù)及用法詳解
- Keras中的多分類(lèi)損失函數(shù)用法categorical_crossentropy
- golang中strconv.ParseInt函數(shù)用法示例
- Go語(yǔ)言截取字符串函數(shù)用法
- go語(yǔ)言中函數(shù)的用法示例詳解
相關(guān)文章
Go中的函數(shù)選項(xiàng)模式(Functional Options Pattern)詳解
在 Go 語(yǔ)言中,函數(shù)選項(xiàng)模式是一種優(yōu)雅的設(shè)計(jì)模式,用于處理函數(shù)的可選參數(shù),本文將對(duì)其進(jìn)行講解,準(zhǔn)備好了嗎,快跟隨著本文一探究竟吧2023-06-06go local history本地歷史恢復(fù)代碼神器
這篇文章主要為大家介紹了go local history本地歷史恢復(fù)代碼神器的使用功能詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01Golang?Fasthttp選擇使用slice而非map?存儲(chǔ)請(qǐng)求數(shù)據(jù)原理探索
本文將從簡(jiǎn)單到復(fù)雜,逐步剖析為什么?Fasthttp?選擇使用?slice?而非?map,并通過(guò)代碼示例解釋這一選擇背后高性能的原因,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-02-02Go語(yǔ)言結(jié)合validator包實(shí)現(xiàn)表單驗(yàn)證
在現(xiàn)代?Web?開(kāi)發(fā)中,表單驗(yàn)證和錯(cuò)誤處理是至關(guān)重要的環(huán)節(jié),本文將演示如何使用?Go?語(yǔ)言的?Gin?框架結(jié)合?validator?包,實(shí)現(xiàn)高級(jí)的表單驗(yàn)證功能,需要的可以參考下2024-11-11Go語(yǔ)言操作mysql數(shù)據(jù)庫(kù)簡(jiǎn)單例子
這篇文章主要介紹了Go語(yǔ)言操作mysql數(shù)據(jù)庫(kù)簡(jiǎn)單例子,本文包含插入數(shù)據(jù)和查詢(xún)代碼實(shí)例,需要的朋友可以參考下2014-10-10Go語(yǔ)言中關(guān)于set的實(shí)現(xiàn)思考分析
Go?開(kāi)發(fā)過(guò)程中有時(shí)我們需要集合(set)這種容器,但?Go?本身未內(nèi)置這種數(shù)據(jù)容器,故常常我們需要自己實(shí)現(xiàn),下面我們就來(lái)看看具體有哪些實(shí)現(xiàn)方法吧2024-01-01執(zhí)行g(shù)o?build報(bào)錯(cuò)go:?go.mod?file?not?found?in?current?dir
本文主要為大家介紹了執(zhí)行g(shù)o build報(bào)錯(cuò)go:?go.mod?file?not?found?in?current?directory?or?any?parent?directory解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06