4.2 切片的概念

一、(Slice)切片

  1. 切片的简单定义

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

    备注:这里的s就是切片,值为[2 3 4 5]

    ​ 切片的[2:6]表示半开半闭区间,包括2,不包括6

  2. 举例:

    arr := [...]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
    s := arr[2:6]
    fmt.Println("arr[2:6] = ", s)
    fmt.Println("arr[:6] = ", arr[:6])
    fmt.Println("arr[2:] = ", arr[2:])
    fmt.Println("arr[:] = ", arr[:])

    备注:

    arr[:6]:表示从头开始,取到第6位,前开后闭原则,结果:[0 1 2 3 4 5]

    arr[2:]:表示从第2位开始,取到最后一位,前开后闭原则,结果:[2 3 4 5 6 7 8 9]

    arr[:]:表示查询全部

  3. 切片内部数据结构类似视图,表示要展示的内容有哪些

  4. 如果函数定义时候使用数组,不填写数字,那么表示传的是切片

    func updateSlice(s []int)  {
    	s[0] = 100
    }

    备注:直接会把原数组对应的内容改变

    如果传入的内容是arr[2:],则原始数组会改变成:{0, 1, 100, 3, 4, 5, 6, 7, 8, 9}

二、Slice的扩展

  1. 如果切片设置如下:

    备注:结果:s1=[2 3 4 5]; s2=[5 6]

  2. 上面案例原因:

    切片原理

  3. Slice是可以扩展的

  4. Slice的实现

    Slice的实现

  5. Slice是可以向后扩展,不可以向前扩展

  6. 切片后,读取的内容不可以超越值得下标,但再对其进行切片,向后扩展不可以超越底层数组的cap(s)

  7. 通过代码获取切片的内容长度,cap长度

Last updated

Was this helpful?