day03 Go slice操作
阿新 • • 發佈:2018-11-09
1、定義slice語法
你可以宣告一個未指定大小的陣列來定義切片:
var identifier []type
切片不需要說明長度。
或使用make()函式來建立切片:
var slice1 []type = make([]type, len) //也可以簡寫為 slice1 := make([]type, len)
也可以指定容量,其中capacity為可選引數。
make([]T, length, capacity)
這裡 len 是陣列的長度並且也是切片的初始長度。
2、例項
package main import "fmt" func updateSlices(arr []int) { arr[0] = 100 } func printSlice(s []int) { fmt.Printf("len=%d,cap=%d\n",len(s),cap(s)) } func main() { arr := [...]int{0,1,2,3,4,5,6,7} fmt.Println("arr[2:6] =",arr[2:6]) fmt.Println("arr[:5] =",arr[:5]) fmt.Println("arr[2:] =",arr[2:]) fmt.Println("arr[:] =",arr[:]) s1 := arr[2:] fmt.Println("s1 =",s1) s2 := arr[:] fmt.Println("s2 =",s2) // 修改s1,也修改了arr,slice本身沒有資料,而是對底層arry的一個view,修改slice的資料等於丟改底層的arry。 fmt.Println("after update s1") updateSlices(s1) fmt.Println("s1 =",s1) fmt.Println("arr =",arr) // 修改s2,也修改了arr fmt.Println("after update s2") updateSlices(s2) fmt.Println("s2 =",s2) fmt.Println("arr =",arr) // 切片擴充套件 fmt.Println("extending slice") arr1 := [...]int{0,1,2,3,4,5,6,7} s3 := arr1[2:6] s4 := s3[3:5] fmt.Printf("s3=%v,len(s3)=%d,cap(s3)=%d\n",s3,len(s3),cap(s3)) fmt.Printf("s4=%v,len(s4)=%d,cap(s4)=%d\n",s4,len(s4),cap(s4)) fmt.Println("s3 =",s3) fmt.Println("s4 =",s4) // 像slicet新增元素 s5 := append(s4,10) fmt.Println("s5 =",s5) s6 := append(s5,11) fmt.Println("s6 =",s6) s7 := append(s6,12) fmt.Println("s7 =",s7) // 新增元素的時候,如果超越cap,此時go會新建一個更大的底層陣列來儲存新增的元素。slince 可以向後擴充套件,但是不能向前擴充套件,但是不能超過底層cap的長度。 fmt.Println("arr1 =",arr1) //新增一個slice var s []int //zero value for slice is nil for i:=0 ;i <100 ;i ++ { printSlice(s) s = append(s,2 * i + 1) } fmt.Println("s =",s) s8 := make([]int,16) s9 := make([]int,16,32) s10 := []int{1,2,3,4,5} printSlice(s8) printSlice(s9) printSlice(s10) fmt.Println(s8,s9,s10) // 複製slice copy(s9,s10) printSlice(s9) fmt.Println("s9 =",s9) // 刪除slice元素,刪除s9中的元素4 s9 = append(s9[:3],s9[4:]...) fmt.Println("new s9 =",s9) // 刪除第一個元素 s9 = s9[1:] fmt.Println("after delete header s9 =",s9) // 刪除最後一個元素 s9 = s9[:len(s9) -1 ] fmt.Println("after delete last s9 =",s9) }