作者:智颢Tannerfm_937 | 来源:互联网 | 2023-10-11 16:58
七、Golang之切片(slice)-由于数组的长度是固定的,所以有很多的局限性,所以今天讲切片,切片是一个拥有相同类型且长度可变的有序集合,切片和数组两种不同的数据类型,它是基于
由于数组的长度是固定的,所以有很多的局限性,所以今天讲切片,切片是一个拥有相同类型且长度可变的有序集合,切片和数组两种不同的数据类型,它是基于数组进行了封装,可扩容
切片的定义
var list []int
var list = []int{}
var list = []int{1,2,3}
切片的长度和容量
求切片的长度和容量使用len()方法和cap()方法
使用make 方法初始化切片
make([]T, size, cap)
var list = make([]string,5,10)
切片的拷贝
`直接赋值的两个切片共享的是一个底层数组,修改一个,另一个的值也会改变,如下:`
var list1 = make([]int,3)
list2:=list1
list2[0]=100
fmt.Println(list1)
切片是引用数据类型两个切片指向同一个指针,copy是内置的方法,所以我们使用copy方法来进行切片的拷贝,它可以讲一个切片内容快速拷贝到另一个空间 copy(目标,来源)
var list1 = []int{1,2,3,4,5}
var list2 = make([]int,5)
copy(list2,list1)
list2[0] = 100
fmt.Println(list1)
fmt.Println(list2)
切片的遍历
切片的遍历和数组一样可以使用for 循环
var list = []int{1,2,3,4,5}
for i:=0;i<len(list);i++{
fmt.Println(list[i])
}
for index,value := range list{
fmt.Println(index,value)
}
切片添加元素
go内置的append方法可以给切片添加元素
var list []int
list = append(list,1)
list = append(list,1,2,3,4,5)
var list2 = []int{6,7,8}
list = append(list,list2...)
注意:通过var 关键字声明的切片不用初始化也可以使用append
切片删除元素
golang中并没有提供此方法 但是可以根据特性自己去实现
var list = []int{1,2,3,4,5,6}
list = append(list[0:3],[3:]...)
要从切片a中删除索引为index的元素,操作方法是a = append(a[:index], a[index+1:]...)
排序
var list = []int{3,4,2,1,5}
var list2 = []string{"d","v","a"}
sort.Ints(list)
sort.Strings(list2)
sort.Sort(sort.Reverse(sort.IntSlice(list)))
sort.Sort(sort.Reverse(sort.StringSlice(list2)))
sort.Slice(a, func(i, j int) bool {
return a[i] > a[j]
})