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

Go 1.21新增的slices包中切片函數(shù)用法詳解

 更新時間:2023年08月22日 09:44:10   作者:路多辛  
Go 1.21新增的 slices 包提供了很多和切片相關(guān)的函數(shù),可以用于任何類型的切片,本文通過代碼示例為大家介紹了部分切片函數(shù)的具體用法,感興趣的小伙伴可以了解一下

slices.Max

定義如下:

func Max[S ~[]E, E cmp.Ordered](x S) E

返回 x 中的最大值,如果 x 為空,則 panic。對于浮點數(shù) E, 如果有元素為 NaN,結(jié)果就是 NaN。簡單示例如下:

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ù)來比較元素,如果 x 為空,則 panic。如果根據(jù) cmp 函數(shù)計算后有多個最大元素,返回第一個。簡單示例如下:

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。對于浮點數(shù) E, 如果有元素為 NaN,結(jié)果就是 NaN。簡單示例如下:

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ù)來比較元素,如果 x 為空,則 panic。如果根據(jù) cmp 函數(shù)計算后有多個最小元素,返回第一個。簡單示例如下:

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。簡單示例如下:

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)切片中的元素。簡單示例如下:

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)

對有序類型的切片進行升序排序。對于浮點數(shù)類型,NaN 排在其它值之前。簡單示例如下:

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 進行排序,這種排序不能保證穩(wěn)定。Cmp (a, b) 函數(shù)應(yīng)該在 a < b 時返回一個負(fù)數(shù),在 a > b 時返回一個正數(shù),在 a == b 時返回零。SortFunc 要求 cmp 函數(shù)是嚴(yá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)

對切片 x 進行排序,同時保持相等元素的原始順序,使用 cmp 以與 SortFunc 相同的方式比較元素。簡單示例如下:

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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go中的函數(shù)選項模式(Functional Options Pattern)詳解

    Go中的函數(shù)選項模式(Functional Options Pattern)詳解

    在 Go 語言中,函數(shù)選項模式是一種優(yōu)雅的設(shè)計模式,用于處理函數(shù)的可選參數(shù),本文將對其進行講解,準(zhǔn)備好了嗎,快跟隨著本文一探究竟吧
    2023-06-06
  • golan參數(shù)校驗Validator

    golan參數(shù)校驗Validator

    這篇文章主要介紹了golan參數(shù)校驗Validator,validator包可以通過反射結(jié)構(gòu)體struct的tag進行參數(shù)校驗,下面來看看文章的詳細(xì)介紹吧,需要的朋友也可以參考一下
    2021-12-12
  • go local history本地歷史恢復(fù)代碼神器

    go local history本地歷史恢復(fù)代碼神器

    這篇文章主要為大家介紹了go local history本地歷史恢復(fù)代碼神器的使用功能詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • Go語言通道之緩沖通道

    Go語言通道之緩沖通道

    這篇文章介紹了Go語言通道之緩沖通道,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • Golang?Fasthttp選擇使用slice而非map?存儲請求數(shù)據(jù)原理探索

    Golang?Fasthttp選擇使用slice而非map?存儲請求數(shù)據(jù)原理探索

    本文將從簡單到復(fù)雜,逐步剖析為什么?Fasthttp?選擇使用?slice?而非?map,并通過代碼示例解釋這一選擇背后高性能的原因,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-02-02
  • Go語言結(jié)合validator包實現(xiàn)表單驗證

    Go語言結(jié)合validator包實現(xiàn)表單驗證

    在現(xiàn)代?Web?開發(fā)中,表單驗證和錯誤處理是至關(guān)重要的環(huán)節(jié),本文將演示如何使用?Go?語言的?Gin?框架結(jié)合?validator?包,實現(xiàn)高級的表單驗證功能,需要的可以參考下
    2024-11-11
  • go性能分析工具pprof的用途及使用詳解

    go性能分析工具pprof的用途及使用詳解

    剛開始接觸go就遇到了一個內(nèi)存問題,在進行內(nèi)存分析的時候發(fā)現(xiàn)了一下比較好的工具,在此留下記錄,下面這篇文章主要給大家介紹了關(guān)于go性能分析工具pprof的用途及使用的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • Go語言操作mysql數(shù)據(jù)庫簡單例子

    Go語言操作mysql數(shù)據(jù)庫簡單例子

    這篇文章主要介紹了Go語言操作mysql數(shù)據(jù)庫簡單例子,本文包含插入數(shù)據(jù)和查詢代碼實例,需要的朋友可以參考下
    2014-10-10
  • Go語言中關(guān)于set的實現(xiàn)思考分析

    Go語言中關(guān)于set的實現(xiàn)思考分析

    Go?開發(fā)過程中有時我們需要集合(set)這種容器,但?Go?本身未內(nèi)置這種數(shù)據(jù)容器,故常常我們需要自己實現(xiàn),下面我們就來看看具體有哪些實現(xiàn)方法吧
    2024-01-01
  • 執(zhí)行g(shù)o?build報錯go:?go.mod?file?not?found?in?current?directory?or?any?parent?directory

    執(zhí)行g(shù)o?build報錯go:?go.mod?file?not?found?in?current?dir

    本文主要為大家介紹了執(zhí)行g(shù)o build報錯go:?go.mod?file?not?found?in?current?directory?or?any?parent?directory解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06

最新評論