10、切片

package main

import "fmt"

// 通过slice,更新array
func updateSlice(a []int) {
    a[0] = 333
}

func main() {

    // Slice(切片):本身没有数据,是对底层array的一个view。 []里面带有: 的都是切片
    arr := [...]int{0,1,2,3,4,5,6,7}

    // 从arr下标1开始,往后取到下标4
    arr1 := arr[1:5]
    fmt.Println(arr1) // [1,2,3,4]

    // 从头开始取到下标为5
    arr2 := arr[:6]
    fmt.Println(arr2) // [0 1 2 3 4 5]

    // 从下标3开始,取到最后
    arr3 := arr[3:]
    fmt.Println(arr3) // [3,4,5,6,7]

    // 打印出整个数组的view
    arr4 := arr[:]
    fmt.Println(arr4)

    // 从 slice 里面再取 slice
    arr5 := arr[2:5] // [2,3,4]
    arr6 := arr5[1:3] // [3,4]
    fmt.Println(arr6)

    // slice本身没有数据,改变slice会改变原来的array
    updateSlice(arr6)
    fmt.Println(arr)

    // Reslice :即对slice的重复赋值
    s := arr[2:6]
    s = s[:3]
    s = s[1:]
    s = arr[:]
    fmt.Println(s)

    // slice 扩展:从slice里面再取slice,要是下标超出就看cap,只要没超过capacity就正常
    arr7 := arr6[0:5] // [3,4,5,6,7]
    fmt.Println(arr7)

    // 容量(capacity):是指slice的起始下标,到原array的结束位置
    arr = [...]int{7,6,5,4,3,2,1,0}
    fmt.Println("原数组:",arr,"capacity:",cap(arr)) // 原数组: [7 6 5 4 3 2 1 0] capacity: 8

    s1 := arr[4:8]
    fmt.Println("原数组:",s1,"capacity:",cap(s1)) // 原数组: [3 2 1 0] capacity: 4

    s2 := s1[2:]
    fmt.Println("原数组:",s2,"capacity:",cap(s2)) // 原数组: [1 0] capacity: 2
}

 

posted @ 2021-11-20 14:04  JaydenQiu  阅读(61)  评论(0)    收藏  举报