一、Go语言中切片定义
1.Slice本身没有数据,是对底层array的一个view
2.修改Slice中的某一个值,原数组中的值也会更新
示例1:
arr := [...]int{0, 1, 2, 3, 4, 5, 6, 7}
fmt.Println("arr[2:6] = ", arr[2:6])
fmt.Println("arr[:6] = ", arr[:6])
fmt.Println("arr[2:] = ", arr[2:])
fmt.Println("arr[:] = ", arr[:])
s := arr[2:6]
s[0] = 10
fmt.Println(arr)
二、Go语言中的Reslice
示例2:
arr := [...]int{0, 1, 2, 3, 4, 5, 6, 7}
s := arr[2:6]
fmt.Println(s)
s = s[:3]
fmt.Println(s)
s = s[1:]
fmt.Println(s)
s = s[:]
fmt.Println(s)
三、Slice的扩展
1.slice可以向后扩展,不可以向前扩展
2.s[i]不可以超越len(s),向后扩展不可以超越底层数组cap(s)
示例3:
arr := [...]int{0, 1, 2, 3, 4, 5, 6, 7}
s1 := arr[2:6]
fmt.Println(s1)
s2 := s1[3:5]
fmt.Println(s2)
四、向Slice添加元素
1.添加元素是如果超越cap,系统会重新分配更大的底层数组
2.由于值传递的关系,必须接收append的返回值
3.s = append(s, val)
示例4:
arr := [...]int{0, 1, 2, 3, 4, 5, 6, 7}
s1 := arr[2:6]
s2 := s1[3:5]
s3 := append(s2, 10)
s4 := append(s3, 11)
fmt.Println("s1 = ", s1)
fmt.Println("s2 = ", s2, len(s2), cap(s2))
fmt.Println("s3 = ", s3, len(s3), cap(s3))
fmt.Println("s4 = ", s4, len(s4), cap(s4))
fmt.Println(arr)
五、Slice的创建
示例5:
var s []int
s1 := []int{2, 4, 6, 8}
s2 := make([]int, 16)
s3 := make([]int, 10 , 32)
六、Slice的复制
示例6:
s1 := []int{2, 4, 6, 8}
s2 := make([]int, 16)
copy(s2, s1)
七、Slice的删除
1.删除中间元素
示例7:
s2 = append(s2[:3], s2[4:]...)
2.删除头元素
示例8:
s2 = s2[1:]
3.删除尾元素
示例9:
s2 = s2[:len(s2) - 1]