这是我参与「第五届青训营 」笔记创作活动的第10天.
切片的CRUD:
切片的增删改查
go语言切片元素的添加和删除:
切片是一个动态数组,可以使用append()函数来添加元素,go语言中并没有专门删除切片元素的方法,但是可以利用切片本身的特性来删除元素.由于,切片是引用类型,通过赋值的方式会改变原有的内容,go提供了copy()函数来拷贝切片.
1.添加元素:
使用append()函数,切片名=append(切片名,要添加的值)
var s1 = []int{}
s1 = append(s1, 100)
s1 = append(s1, 200)
s1 = append(s1, 300)
fmt.Println(s1)
2.删除元素:
方法: 切片名=append(切片名[:index],切片名[index+1:]...)
var s1 = []int{1, 2, 3, 4}
fmt.Println("原来的s1:", s1)
//删除3这个元素,索引为2
s1 = append(s1[:2], s1[3:]...)
fmt.Println("删除3元素后的s1:", s1)
3.更新元素:
直接赋值即可
//更新切片内容update
var s1 = []int{1, 2, 3, 4}
s1[1] = 100
fmt.Println(s1)
4.查询元素:
遍历查找即可.
//查询元素
var s1 = []int{1, 2, 3, 4, 5, 6}
key := 3
for i, v := range s1 {
if v == key {
fmt.Println("i:", i)
}
}
5.拷贝元素:
假如将s2直接等于s1,那么s1,s2指向的是同一内存地址,如果改变s2的值,那么s1的值也会影响,这种不叫拷贝.
var s1 = []int{1, 2, 3, 4}
var s2 = s1
s2[0] = 200
fmt.Println("s1:", s1)
fmt.Println("s2:", s2)
我们可以使用copy()函数进行拷贝,但在拷贝之前,要给那个要拷贝的切片先分配好一样容量大小的内存空间.
//拷贝copy
var s1 = []int{1, 2, 3, 4}
fmt.Println("s1:", s1)
var s2 = make([]int, 3)
fmt.Println("复制前的s2:", s2)
copy(s2, s1)
fmt.Println("复制后的s2:", s2)
//更新s2中的内容,看看s1会不会也会改变?
s2[1] = 100
fmt.Println("s1:", s1)
fmt.Println("s2:", s2)