14 切片的切片
切片可包含任何类型,甚至包括其他切片。
1
2
3
4
5
6
7
8
9
10 1package main
2
3import "fmt"
4
5func main() {
6 iii := [][]int{ []int{1, 2}, []int{3, 4}, []int{5, 6} }
7 fmt.Println(iii)
8}
9
10
15 向切片追加元素
Go提供了append函数,用于向切片追加新元素。
1
2
3 1func append(s []T, vs ...T) []T
2
3
append的第一个参数为s为元素类型为T的切片,其余类型T的值将会追加到该切片的末尾。
append的结果是一个包含原切片所有元素加上新添加元素的切片。
当s的底层数组太小,不足以容纳所有给定的值时,它就会分配一个更大的数组。返回的切片会指向新分配的数组。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 1package main
2
3import "fmt"
4
5func main() {
6
7 var ii []int
8 jj := append(ii, 999)
9 printSlice(jj)
10 printSlice(ii)
11 kk := append(ii, 1,2,3,4,5)
12 printSlice(kk)
13 printSlice(ii)
14}
15
16func printSlice(s []int) {
17 fmt.Printf("len=%d cap=%d %v \n", len(s), cap(s), s)
18}
19
20
16 Range
for循环的range形式可遍历切片或映射。
当使用for循环遍历切片时,每次迭代都会返回两个值。第一个值为当前元素的下标,第二个值为该下标所对应元素的一份副本。
1
2
3
4
5
6
7
8
9
10
11
12 1package main
2
3import "fmt"
4
5func main() {
6 ii := []int{1, 2, 3, 4, 5, 6, 7}
7 for i, v := range ii{
8 fmt.Println(i, v)
9 }
10}
11
12
可以使用_来忽略索引或值。
如果只需要所以,将,value的部分去除即可。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 1package main
2
3import "fmt"
4
5func main() {
6 var ii = []int{1, 2, 3, 4, 5, 6}
7 for i := range ii{
8 ii[i] += 10
9 }
10 for _, v := range ii {
11 fmt.Println(v)
12 }
13}
14
15