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