切片: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)
}