切片
- 切片(Slice)是一个拥有相同类型元素的可变长度的序列。它是基于数组类型做的一层封装。它非常灵活,支持自动扩容。
- 切片是一个引用类型,它的内部结构包含地址、长度和容量。切片一般用于快速地操作一块数据集合。
切片定义
- 定义格式:
var name []数据类型
- 例子:
var a []string
- 从数组中获取切片
a := [5]int{
1, 2, 3, 4, 5}
s := a[1:3]
使用make定义切片
- 定义格式:
make([]T, size, cap)
- 例子:
a := make([]int, 2, 10)
切片的赋值与拷贝
- 拷贝前后两个变量共享底层数组,对一个切片的修改会影响另一个切片的内容
- 例子:
s1 := make([]int, 3)
s2 := s1
s2[0] = 100
fmt.Println(s1)
fmt.Println(s2)
- 使用copy()函数复制切片,改变其一不会影响另一个
- 例子:
a := []int{
1, 2, 3, 4, 5}
c := make([]int, 5, 5)
copy(c, a)
切片的遍历,可以使用for与for range
- 例子:
s := []int{
1, 3, 5}
for i := 0; i < len(s); i++ {
fmt.Println(i, s[i])
}
for index, value := range s {
fmt.Println(index, value)
}
使用append方法给切片动态添加新元素
- 例子:
var s []int
s = append(s, 1)
s = append(s, 2, 3, 4)
s2 := []int{
5, 6, 7}
s = append(s, s2...)
从切片中删除元素
- 切片没有删除方法,只能截取删除元素前的片段与删除元素后的片段,略过删除元素后进行合并
- 例子:
a := []int{
30, 31, 32, 33, 34, 35, 36, 37}
a = append(a[:2], a[3:]...)
fmt.Println(a)