- 切片:切片是数组的一个引用,因此切片是引用类型
- 切片的长度可以改变,因此,切片是一个可变的数组
- 切片遍历方式和数组一样,可以用len()求长度
- cap可以求出slice最大的容量,0 <= len(slice) <= (array),其中array是slice引用的数组
-
切片的定义:var 变量名 []类型,比如 var str []string var arr []int
- 切片初始化:var slice []int = arr[start:end]
包含start到end之间的元素,但不包含end - Var slice []int = arr[0:end]可以简写为 var slice []int=arr[:end]
- Var slice []int = arr[start:len(arr)] 可以简写为 var slice[]int = arr[start:]
- Var slice []int = arr[0, len(arr)] 可以简写为 var slice[]int = arr[:]
- 如果要切片最后一个元素去掉,可以这么写:
Slice = slice[:len(slice)-1]
创建切片的方式:var slice []type = make([]type, len) slice := make([]type, len) slice := make([]type, len, cap)
从数组中截取出切片:
var a = [5]int{1,2,3,4,5} fmt.Println(a) //切片引用传值 var b = a[1:] fmt.Println(b) b[0] = 666 fmt.Println(a) fmt.Println(b)
输出:
[1 2 3 4 5]
[2 3 4 5]
[1 666 3 4 5]
[666 3 4 5]
用append内置函数操作切片:
slice = append(slice, 10)
var a = []int{1,2,3}
var b = []int{4,5,6}
a = append(a, b…)
For range 遍历切片:
for index, val := range slice {
}
切片resize:
var a = []int {1,3,4,5}
b := a[1:2]
b = b[0:3]
切片拷贝:
s1 := []int{1,2,3,4,5}
s2 := make([]int, 10)
copy(s2, s1)
s3 := []int{1,2,3}
s3 = append(s3, s2…)
s3 = append(s3, 4,5,6)
string与slice,string底层就是一个byte的数组,因此,也可以进行切片操作:
str := “hello world”
s1 := str[0:5]
fmt.Println(s1)
s2 := str[5:]
fmt.Println(s2)
如何改变string中的字符值?string本身是不可变的,因此要改变string中字符,需要如下操作:
str := “hello world”
s := []byte(str)
s[0] = ‘o’
str = string(s)