zoukankan      html  css  js  c++  java
  • Go语言学习(六)Slice

    slice(切片)类型,是Go语言中的一种引用类型,如果你将一个切片赋值给另外一个切片,这两个切片将引用同一个底层数组。这与传递一个指向底层数组的指针相类似。

    确切地说,slice就是一个指向array的指针。

    slice的创建:

        //通过make直接创建
        s1 := make([]int, 10)
        fmt.Println(s1) //[0 0 0 0 0 0 0 0 0 0]
    
        
        // 这不是创建数组哦~~创建数组是[n]<type>或者[...]<type>
        s2 := []int{1, 2, 3, 4, 5}
        fmt.Println(s2) //[1 2 3 4 5]
    
       

    通过上述2中方式都可以直接创建slice。(引用类型一般都通过make来创建)

    不过,如果给定一个array 或者其他slice,一个新slice 通过a[I:J] 的方式创建。

    这会创建一个新的slice,指向a,从序号I 开始,结束在序号J之前。长度为J - I。即[I,J)

    例如:

    a := [...]int{1, 2, 3, 4, 5}
    fmt.Println(a) //[1 2 3 4 5]

    s1 := a[2:4] //[3 4]
    fmt.Println(s1)

    //s1[0] = 99 //3--->99
    //fmt.Println(s1)
    //fmt.Println(a)

    s2 := a[1:5] //[2 3 4 5]
    fmt.Println(s2)

    //这是a[0:len(a)]的简化写法
    s3 := a[:] //[1 2 3 4 5]
    fmt.Println(s3)

    //这是a[0:4]的简化写法
    s4 := a[:4] //[1 2 3 4]
    fmt.Println(s4)

    s5 := s2[:] //[2 3 4 5]
    fmt.Println(s5)

    上面的代码中,创建的s1~s5都指向数组a,所以,通过s1~s5更改任意一个值,都会反映到数组a中。

    也就是说,s1[0] = 99之后,s1~s5已经数组a里面的3都变成了99。

    slice的扩展:

    append:函数append 向slice s 追加零值或其他x 值,并且返回追加后的新的、与s 有相同类型的slice。

    package main
    
    import "fmt"
    
    func main() {
        s0 := make([]int, 10)
    
        for i := 0; i < 10; i++ {
            s0[i] = i
        }
        fmt.Println(s0)
    
        s1 := append(s0, 2) //追加一个元素
        fmt.Println(s1)
    
        s2 := append(s1, 3, 5, 7)  //追加多个元素
        fmt.Println(s2)
    
        s3 := append(s2, s0...) //追加一个slice,注意这三个点!!
        fmt.Println(s3)
    }

    Copy:函数copy 从源slice src 复制元素到目标dst,并且返回复制的元素的个数。

        var a = [...]int{0, 1, 2, 3, 4, 5, 6, 7}
        var s = make([]int, 6)
        n1 := copy(s, a[0:]) //将a(从0开始)拷贝到s中,s长度只有6,所以拷贝[0 1 2 3 4 5]
        fmt.Println(n1)      //6
        fmt.Println(s)       //[0 1 2 3 4 5]
        
        n2 := copy(s, s[2:]) //将s(从2开始)拷贝到s中,只拷贝了[2 3 4 5]四个数,覆盖了s的前四个数
        fmt.Println(n2)      //4
        fmt.Println(s)       //[2 3 4 5 4 5]

     

  • 相关阅读:
    python学习日记——基本数据类型
    python学习日记——安装及初识
    STF平台探索
    fiddler基本操作梳理
    fly.js抛物线连续不断加入购物车
    判断是否存在某个字段hasOwnProperty
    vue中提示toFixed不是函数
    vue中父组件给子组件传值,子组件给父组件传值
    js判断用户的浏览器设备是移动端还是pc端
    css预处理器--sass学习($变量名)
  • 原文地址:https://www.cnblogs.com/yejg1212/p/2983651.html
Copyright © 2011-2022 走看看