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

Go1.21新增slices包中函數(shù)的用法詳解

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

slices.Delete

定義如下:

func Delete[S ~[]E, E any](s S, i, j int) S

從 s 中刪除元素 s[i:j],返回修改后的切片。如果 s[i:j] 不是 s 的有效切片,則會 panic。Delete是 O(len(s)-j),因此如果必須刪除許多項,最好調(diào)用一次刪除全部,而不是逐個刪除。Delete不能修改元素 s[len(s)-(j-i):len(s)]。如果這些元素包含指針,可以考慮將這些元素歸零,以便它們引用的對象可以被垃圾回收。簡單示例如下:

package main
import (
    "fmt"
    "slices"
)
func main() {
    letters := []string{"a", "b", "c", "d", "e"}
    letters = slices.Delete(letters, 1, 4)
    fmt.Println(letters) // [a e]
}

slices.DeleteFunc

定義如下:

func DeleteFunc[S ~[]E, E any](s S, del func(E) bool) S

從 s 中刪除 del函數(shù)返回 true 的元素,并返回修改后的切片。當(dāng) DeleteFunc 刪除m個元素時,它可能不會修改元素s[len(s)-m:len(s)]。如果這些元素包含指針,、可以考慮將這些元素歸零,以便它們引用的對象可以被垃圾回收。簡單示例如下:

package main
import (
    "fmt"
    "slices"
)
func main() {
    seq := []int{0, 1, 1, 2, 3, 5, 8}
    seq = slices.DeleteFunc(seq, func(n int) bool {
        return n%2 != 0 // 刪除奇數(shù)
    })
    fmt.Println(seq) // [0 2 8]
}

slices.Equal

定義如下:

func Equal[S ~[]E, E comparable](s1, s2 S) bool

判斷兩個切片是否相等(長度相同且所有元素相等)。如果長度不同,返回 false。如果長度相同,將按索引遞增的順序比較元素,并在第一個不相等出現(xiàn)時停止比較。簡單示例如下:

package main
import (
    "fmt"
    "slices"
)
func main() {
    numbers := []int{0, 42, 8}
    fmt.Println(slices.Equal(numbers, []int{0, 42, 8})) // true
    fmt.Println(slices.Equal(numbers, []int{10})) // false
}

slices.EqualFunc

定義如下:

func EqualFunc[S1 ~[]E1, S2 ~[]E2, E1, E2 any](s1 S1, s2 S2, eq func(E1, E2) bool) bool

對每對元素使用自定義函數(shù)來判斷兩個片是否相等。如果長度不同,返回false。如果長度相同,將按索引遞增的順序比較元素,并在 eq 返回 false 的第一個索引處停止比較。簡單示例如下:

package main
import (
    "fmt"
    "slices"
    "strconv"
)
func main() {
    numbers := []int{0, 42, 8}
    strings := []string{"000", "42", "0o10"}
    equal := slices.EqualFunc(numbers, strings, func(n int, s string) bool {
        sn, err := strconv.ParseInt(s, 0, 64)
        if err != nil {
            return false
        }
        return n == int(sn)
    })
    fmt.Println(equal) // true
}

slices.Grow

定義如下:

func Grow[S ~[]E, E any](s S, n int) S

增加片的容量,以為另外 n 個元素提供空間。在Grow(n)之后,至少可以將n個元素添加到片中,而無需再進(jìn)行分配。如果 n 為負(fù)值或太大而無法分配內(nèi)存,就會 panic。

slices.Index

定義如下:

func Index[S ~[]E, E comparable](s S, v E) int

返回 v 在 s 中第一次出現(xiàn)的索引,如果不存在則返回-1。簡單示例如下:

package main
import (
    "fmt"
    "slices"
)
func main() {
    numbers := []int{0, 42, 8}
    fmt.Println(slices.Index(numbers, 8)) // 2
    fmt.Println(slices.Index(numbers, 7)) // -1
}

slices.IndexFunc

定義如下:

func IndexFunc[S ~[]E, E any](s S, f func(E) bool) int

返回第一個滿足 f(s[i]) 的索引 i,如果不滿足則返回-1。簡單示例如下:

package main
import (
    "fmt"
    "slices"
)
func main() {
    numbers := []int{0, 42, -10, 8}
    i := slices.IndexFunc(numbers, func(n int) bool {
        return n < 0
    })
    fmt.Println("First negative at index", i) // 2
}

slices.Insert

定義如下:

func Insert[S ~[]E, E any](s S, i int, v ...E) S

將 值 v… 在索引 i 處插入到 s,返回修改后的切片。s[i:] 中的元素被上移以騰出空間。在返回的切片 r 中,r[i] == v[0], r[i+len(v)] == 原來在 r[i] 處的 value。如果超出范圍,則 panic。這個函數(shù)的復(fù)雜度為 O(len(s) + len(v))。簡單示例如下:

package main
import (
    "fmt"
    "slices"
)
func main() {
    names := []string{"Alice", "Bob", "Vera"}
    names = slices.Insert(names, 1, "Bill", "Billie")
    names = slices.Insert(names, len(names), "Zac")
    fmt.Println(names) // [Alice Bill Billie Bob Vera Zac]
}

slices.IsSorted

定義如下:

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

判斷 x 是否按升序排序。簡單示例如下:

package main
import (
    "fmt"
    "slices"
)
func main() {
    fmt.Println(slices.IsSorted([]string{"Alice", "Bob", "Vera"})) // true
    fmt.Println(slices.IsSorted([]int{0, 2, 1})) // false
}

【參考資料】

Package slices(https://golang.google.cn/pkg/slices/

到此這篇關(guān)于Go1.21新增slices包中函數(shù)的用法詳解的文章就介紹到這了,更多相關(guān)Go1.21 slices包內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • golang 實現(xiàn)Location跳轉(zhuǎn)方式

    golang 實現(xiàn)Location跳轉(zhuǎn)方式

    這篇文章主要介紹了golang 實現(xiàn)Location跳轉(zhuǎn)方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • Go語言學(xué)習(xí)之new函數(shù)的用法詳解

    Go語言學(xué)習(xí)之new函數(shù)的用法詳解

    這篇文章主要為大家詳細(xì)介紹了Go語言中new()函數(shù)的相關(guān)知識以及具體用法,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價值,感興趣的小伙伴可以了解一下
    2023-05-05
  • Go語言基礎(chǔ)語法和基本數(shù)據(jù)類型知識鞏固

    Go語言基礎(chǔ)語法和基本數(shù)據(jù)類型知識鞏固

    這篇文章主要為大家介紹了Go語言基礎(chǔ)語法和基本數(shù)據(jù)類型知識鞏固,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • 三種Golang數(shù)組拷貝的實現(xiàn)方式與性能分析

    三種Golang數(shù)組拷貝的實現(xiàn)方式與性能分析

    在?Golang?中,有多種方式可以進(jìn)行數(shù)組的拷貝,本文將對其中的三種方式進(jìn)行性能分析,并比較它們的優(yōu)缺點,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-06-06
  • 超詳細(xì)Go語言中JSON處理技巧分享

    超詳細(xì)Go語言中JSON處理技巧分享

    這篇文章主要為大家總結(jié)了go語言中對JSON數(shù)據(jù)結(jié)構(gòu)和結(jié)構(gòu)體之間相互轉(zhuǎn)換問題及解決方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-06-06
  • Go?interface{}?轉(zhuǎn)切片類型的實現(xiàn)方法

    Go?interface{}?轉(zhuǎn)切片類型的實現(xiàn)方法

    本文主要介紹了Go?interface{}?轉(zhuǎn)切片類型的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Golang實現(xiàn)內(nèi)網(wǎng)穿透詳解

    Golang實現(xiàn)內(nèi)網(wǎng)穿透詳解

    這篇文章主要為大家詳細(xì)介紹了Golang實現(xiàn)內(nèi)網(wǎng)穿透的相關(guān)知識,包括原理和代碼實現(xiàn),文中的示例代碼講解詳細(xì),有需要的小伙伴可以參考一下
    2024-11-11
  • Go語言提升開發(fā)效率的語法糖技巧分享

    Go語言提升開發(fā)效率的語法糖技巧分享

    每門語言都有自己的語法糖,像java的語法糖就有方法變長參數(shù)、拆箱與裝箱、枚舉、for-each等等,Go語言也不例外。本文就來介紹一些Go語言的語法糖,需要的可以參考一下
    2022-07-07
  • Golang實踐指南之獲取目錄文件列表

    Golang實踐指南之獲取目錄文件列表

    在搭建項目中一般都會有確定項目根目錄的絕對路徑的需求,下面這篇文章主要給大家介紹了關(guān)于Golang實踐指南之獲取目錄文件列表的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • Golang接口的定義與空接口及斷言的使用示例

    Golang接口的定義與空接口及斷言的使用示例

    在?Golang?中,接口是一種類型,它是由一組方法簽名組成的抽象集合。這篇文章主要為大家介紹了Golang接口的具體使用,希望對大家有所幫助,空接口是特殊形式的接口類型,普通的接口都有方法,而空接口沒有定義任何方法口,也因此,我們可以說所有類型都至少實現(xiàn)了空接口
    2023-04-04

最新評論

富裕县| 米林县| 米脂县| 临潭县| 梁河县| 武冈市| 惠来县| 南丰县| 垦利县| 北川| 门源| 迁西县| 武安市| 郓城县| 崇文区| 南皮县| 尼木县| 莱芜市| 阳信县| 凉山| 鸡东县| 浦东新区| 海伦市| 抚州市| 嘉峪关市| 隆子县| 湘潭市| 吴江市| 南皮县| 宁乡县| 新巴尔虎左旗| 澜沧| 涪陵区| 沿河| 德兴市| 磴口县| 沅江市| 武冈市| 改则县| 怀安县| 罗源县|