天天看點

go語言基礎 切片 slice

切片:slice

了解為變長的數組

A:切片建立

s1:=[]int{1,2,3,4,5}

s2:=make([]T,len,cap)

arr := [5]int{1,2,3,4,5}

s3 := arr[start:end] // 切割數組:[start,end)

s4:=arr[:]

B:切片的類型:

[]資料類型

切片屬于引用類型:

s1:=[] int{1,2,3,4}

s2:=s1

package main

import "fmt"

func main()  {
   /*
   數組的特點:
   有序(有下标),可以重複,資料可以被修改,但是長度不能修改(定長)。
   切片:變長,長度可以改變。
   容器:
      len(),cap()
    */
    // 建立數組
    a := [4]int{1,2,3,4}
    fmt.Println(len(a))
    fmt.Println("數組的:",len(a),cap(a))
    // 建立切片1.直接建立
    s1 := [] int{1,2,3,4,5,6,7,8}
    fmt.Println(s1)
    fmt.Println("切片的:",len(s1),cap(s1)) // 8 8
    fmt.Printf("%T\n", s1) // []int
    s2 :=[]int{} // 建立了一個空的切片
    fmt.Println(len(s2), cap(s2)) // 0 0

    // 2.使用make([]T, len,cap) cap如果不給數值,那麼和len一緻。
    s3 := make([]int, 3, 8)
    fmt.Println(s3) // [0 0 0]
    fmt.Println(len(s3),cap(s3)) // 3 8

    //3.在數組的基礎上建立切片
    b := [10]int{1,2,3,4,5,6,7,8,9,10}
    s4 := b[2:6] // 數組名[start:end)
    fmt.Println(s4)//[3 4 5 6]
    fmt.Println(len(s4), cap(s4)) // 4 8
    s5 := b[:6] // [0:6],從頭開始,切割刀下标6(不包含6)
    fmt.Println(s5)
    s6 :=b[6:] // [start:],從start開始,切割刀最後
    fmt.Println(s6)
    //s7 := b[4:12] // invalid slice index 12 (out of bounds for 10-element array)
    //fmt.Println(s7)





}       

關鍵字

len()測量數組或者切片的長度

cap()測量切片的總長度 ,如果超出最大值,切片會擴容

append()增加切片中的内容可以傳值,也可以把兩個切片拼在一起

append(slice, ele1,ele2,ele3)
append(slice1,slice2...)      

copy()拷貝切片

package main

import "fmt"

func main()  {
   /*
   copy(dst,src)
    */
    s1:=[]int{1,2,3,4,5}
    s2:=[]int{7,8,9}
    fmt.Println(s1)
    fmt.Println(s2)
    //copy(s1,s2) //将s2拷貝到s1中
    //copy(s2, s1) // 将s1中的資料,拷貝到s2中。
    //copy(s2, s1[2:4])// 将s1中3-4 的資料,拷貝到s2中
    copy(s2[1:] , s1[2:4])
    fmt.Println(s1)
    fmt.Println(s2)
}