0%

Go语言多切片和数组

数组是同一类型元素的集合,Go语言中不允许混合不同类型的元素(interface{}类型数组可以包含任意类型)。切片是由数组建立的一种方便、灵活且功能强大的包装,它本身不拥有任何数据,只是对现有数组的引用。

一、概念

  1. 数组:是同一类型元素的集合,Go语言中不允许混合不同类型的元素(interface{}类型数组可以包含任意类型)。

    • 数组是值类型,意为当把数组a赋值给一个新的变量b时,变量b得到的只是一个原始数组a的副本,如果对新变量b进行更改则不会影响原始数组a。
    • 数组的下标从0开始.
  2. 切片:是由数组建立的一种方便、灵活且功能强大的包装,它本身不拥有任何数据,只是对现有数组的引用。

    • 切片是引用类型,同值类型刚好相反。

二、使用

  1. 数组

    • 声明方式

      • 只声明不初始化var a [3]int,此时a的所有元素都被赋值为整型0
      • 声明并初始化(必须初始化所有元素)
        • 简略模式声明:a := [3]int{1, 2, 3},也可初始化部分元素:a := [3]int{1}
      1
      2
      3
      4
      var a [3]int 
      a[0] = 12 // array index starts at 0
      a[1] = 78
      a[2] = 50`
      • 简略模式声明时不指定长度a := [...]int{12, 78, 50},编译器会自动计算
    • 数组长度len(a)

    • 遍历数组

      • 使用for循环
      • 使用range返回key,value,key可省略
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    package main
    import "fmt"
    func main() {
    c := [...]int{1, 2}
    for i := 0; i < len(c); i++ {
    fmt.Printf("第 %d 个元素为:%d\n", i, c[i])
    }
    for i, v := range c {
    fmt.Printf("第 %d 个元素为:%d\n", i, v)
    }
    }
  2. 切片

    • 声明方式

      • 基于数组arr创建
        • arr[:]
      • 简略模式创建
      • 使用make创建
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      func main() {

      b := [5]int{76, 77, 78, 79, 80}
      var c []int = b[:]
      var d []int = b[1:4]
      fmt.Println(c)
      fmt.Println(d)

      e := []int{6, 7, 8} // creates and array and returns a slice reference
      fmt.Println(e)

      f := make([]int, 5, 5)
      fmt.Println(f)
      }
    • 追加元素append(slice, element)

      • ...运算符
    • 切片长度len(slice)

    • 切片容量cap(slice)

三、参考

  1. 参考一
  2. 参考二