亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Go中slice的使用

發布時間:2020-07-29 09:57:39 來源:網絡 閱讀:352 作者:ck_god 欄目:編程語言
    //切片并不是數組或數組指針,它通過內部指針和相關屬性引用數組片段,以實現變長的方案。
    //slice并不是真正意義上的動態數組,而是一個引用類型。slice總是指向一個底層array,slice的聲明也可以像array一樣,只是不需要長度。
    //slice和數組的區別:聲明數組時,方括號內寫明了數組的長度或使用...自動計算長度,而聲明slice時,方括號內沒有任何字符。
    

Go中slice的使用

slice和數組的區別:聲明數組時,方括號內寫明了數組的長度或使用...自動計算長度,而聲明slice時,方括號內沒有任何字符。


第二:注意make只能創建slicemapchannel,并且返回一個有初始值(非零)

操作

含義

s[n]

切片s中索引位置為n的項

s[:]

從切片s的索引位置0len(s)-1處所獲得的切片

s[low:]

從切片s的索引位置lowlen(s)-1處所獲得的切片

s[:high]

從切片s的索引位置0high處所獲得的切片,len=high

s[low:high]

從切片s的索引位置lowhigh處所獲得的切片,len=high-low

s[low:high:max]

從切片s的索引位置lowhigh處所獲得的切片,len=high-lowcap=max-low

len(s)

切片s的長度,總是<=cap(s)

cap(s)

切片s的容量,總是>=len(s)


示例說明:

    array := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

 

操作


結果

len

cap

說明

array[:6:8]


[0 1 2 3 4 5]

6

8

省略 low

array[5:]


[5 6 7 8 9]

5

5

省略 highmax

array[:3]


[0 1 2]

3

10

省略 highmax

array[:]


[0 1 2 3 4 5 6 7 8 9]

10

10

全部省略


第三:切片和底層數組關系

    s := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

 

    s1 := s[2:5]       //[2 3 4]

    s1[2] = 100        //修改切片某個元素改變底層數組

    fmt.Println(s1, s) //[2 3 100] [0 1 2 3 100 5 6 7 8 9]

 

    s2 := s1[2:6] // 新切片依舊指向原底層數組 [100 5 6 7]

    s2[3] = 200

    fmt.Println(s2) //[100 5 6 200]

 

    fmt.Println(s) //[0 1 2 3 100 5 6 200 8 9]


第四,slice的內建函數append和copy的使用

1) append

append函數 slice 尾部添加數據,返回新的 slice 對象

    var s1 []int //創建nil切換

    //s1 := make([]int, 0)

    s1 = append(s1, 1)       //追加1個元素

    s1 = append(s1, 2, 3)    //追加2個元素

    s1 = append(s1, 4, 5, 6) //追加3個元素

    fmt.Println(s1)          //[1 2 3 4 5 6]

 

    s2 := make([]int, 5)

    s2 = append(s2, 6)

    fmt.Println(s2) //[0 0 0 0 0 6]

 

    s3 := []int{1, 2, 3}

    s3 = append(s3, 4, 5)

    fmt.Println(s3)//[1 2 3 4 5]

 

append函數會智能地底層數組的容量增長,一旦超過原底層數組容量,通常以2倍容量重新分配底層數組,并復制原來的數據:

func main() {

    s := make([]int, 0, 1)

    c := cap(s)

    for i := 0; i < 50; i++ {

        s = append(s, i)

        if n := cap(s); n > c {

            fmt.Printf("cap: %d -> %d\n", c, n)

            c = n

        }

    }

    /*

        cap: 1 -> 2

        cap: 2 -> 4

        cap: 4 -> 8

        cap: 8 -> 16

        cap: 16 -> 32

        cap: 32 -> 64

    */

}

2) copy

函數 copy 在兩個 slice 間復制數據,復制?度以 len 小的為準兩個 slice 可指向同?底層數組

 

    data := [...]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

    s1 := data[8:]  //{8, 9}

    s2 := data[:5] //{0, 1, 2, 3, 4}

    copy(s2, s1)    // dst:s2, src:s1

 

    fmt.Println(s2)   //[8 9 2 3 4]

    fmt.Println(data) //[8 9 2 3 4 5 6 7 8 9]

第五,切片作為函數的參數使用。

func test(s []int) { //切片做函數參數

    s[0] = -1

    fmt.Println("test : ")

    for i, v := range s {

        fmt.Printf("s[%d]=%d, ", i, v)

        //s[0]=-1, s[1]=1, s[2]=2, s[3]=3, s[4]=4, s[5]=5, s[6]=6, s[7]=7, s[8]=8, s[9]=9,

    }

    fmt.Println("\n")

}

 

func main() {

    slice := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

    test(slice)

 

    fmt.Println("main : ")

    for i, v := range slice {

        fmt.Printf("slice[%d]=%d, ", i, v)

        //slice[0]=-1, slice[1]=1, slice[2]=2, slice[3]=3, slice[4]=4, slice[5]=5, slice[6]=6, slice[7]=7, slice[8]=8, slice[9]=9,

    }

    fmt.Println("\n")

}


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

任丘市| 平顶山市| 临高县| 嘉兴市| 修水县| 体育| 桦川县| 民乐县| 新干县| 个旧市| 昆山市| 冕宁县| 高平市| 湖州市| 望城县| 叶城县| 高密市| 杭锦后旗| 通河县| 壶关县| 宾川县| 乌拉特中旗| 嘉兴市| 渝北区| 宜兰市| 莫力| 黄冈市| 积石山| 巩义市| 上高县| 绥芬河市| 西贡区| 理塘县| 西乌珠穆沁旗| 石柱| 南昌县| 得荣县| 法库县| 永德县| 兴隆县| 阳东县|