天天看點

關于Go語言Slice

Slice是數組的一個視圖,

它本身沒有資料

隻是對數組的操作

arr := […]int{0,1,2,3}

slice := arr[1:]

slice[0] = 10

arr中的資料為: {0, 10, 2, 3}

Slice真正操作的對象是 對應的數組

Reslice:

s := arr[2:6]

s = s[:3]

s = s[1:]

s = arr[:]

arr := […]int{0,1,2,3,4,5,6,7}

s1 := arr[2:6]

s2 := s1[3:5]

Slice可以向後擴充, 不可以向前擴充

Slice底層有ptr(第一個元素), len(長度), cap(最長長度–從起點到操作數組的最後一位)

因為是值傳遞

是以 append操作一定要有一個新的Slice來接收

因為有可能出現 添加元素導緻長度大于 cap, 是以要建立一個新的Slice

聲明Slice

var s []int

var s2 = make([]int 8)

var s3 = make([]int 8, 16)

s1 := []int{2,4,6,8}

底層建立了一個數組{2,4,6,8}, 然後建立了一個這個數組的原本切片

Copy操作

用法:copy(s2,s1) // 将s2拷貝到s1中

Delete操作

s2 = append(s2[:3], s2[4:]) // 删除下标為3的元素

删除頭尾:

s2 = s2[1:] // 删除頭

s2 = s2[:len(s2)-1]) // 删除尾部