1、切片:切片是数组的一个引用,因此切片是引用类型。但自身是结构体,值拷贝传递。 2、切片的长度可以改变,因此,切片是一个可变的数组。 3、切片遍历方式和数组一样,可以用len()求长度。表示可用元素数量,读写操作不能超过该限制。 4、cap可以求出slice最大扩张容量,不能超出数组限制。0 <= len(slice) <= len(array),其中array是slice引用的数组。 5、切片的定义:var 变量名 []类型,比如 var str []string var arr []int。 6、如果 slice == nil,那么 len、cap 结果都等于 0。
package main
import "fmt"
func test01() {
//1.声明切片
var s1 []int
fmt.Println("s1:", s1)
if s1 == nil {
fmt.Println("s1是空")
} else {
fmt.Println("s1不是空")
}
// 2.:=
s2 := []int{}
fmt.Println("s2:", s2)
// 3.make()
var s3 []int = make([]int, 5)
fmt.Println("s3:", s3)
// 4.初始化赋值
var s4 []int = make([]int, 0, 0)
fmt.Println("s4:", s4)
s5 := []int{1, 2, 3}
fmt.Println("s5:", s5)
// 5.从数组切片
arr := [5]int{1, 2, 3, 4, 5}
var s6 []int
// 前包后不包
s6 = arr[1:4]
fmt.Println("s6:", s6)
}
func main() {
test01()
}
运行结果:
func test02() {
arr := [...]int{9, 8, 7, 6, 5, 4, 3, 2, 1, 0}
slice1 := arr[2:8]
slice2 := arr[:6]
slice3 := arr[5:]
slice4 := arr[:]
slice5 := arr[:len(arr)-1] //去掉切片的最后一个元素
fmt.Printf("arr %v\n", arr)
fmt.Printf("slice1: %v\n", slice1)
fmt.Printf("slice2: %v\n", slice2)
fmt.Printf("slice3: %v\n", slice3)
fmt.Printf("slice4: %v\n", slice4)
fmt.Printf("slice5: %v\n", slice5)
}
运行结果:
func test03() {
darr := [...]int{57, 89, 90, 82, 100, 78, 67, 69, 59}
dslice := darr[2:5]
fmt.Println("array before", darr)
for i := range dslice {
dslice[i]++
}
fmt.Println("array after", darr)
}
运行结果:
append
方法:func test04() {
slice1 := []int{1, 2, 3}
fmt.Println("slice1:", slice1)
slice2 := append(slice1, 4, 5, 6)
fmt.Println("slice2:", slice2)
slice3 := []int{7, 8, 9}
slice4 := append(slice1, slice3...)
fmt.Println("slice4:", slice4)
}
运行结果:
len()
和cap()
func test05() {
slice1 := []string{"apple", "orange", "grape", "mango", "water melon", "pine apple", "chikoo"}
slice2 := slice1[1:3]
fmt.Printf("len: %d cap: %d", len(slice2), cap(slice2))
}
运行结果:
copy()
func test06() {
s1 := []int{1, 2, 3, 4, 5}
s2 := make([]int, 10)
fmt.Printf("before s1 : %v\ns2 : %v\n", s1, s2)
copy(s2, s1)
fmt.Printf("after s1 : %v\ns2 : %v\n", s1, s2)
}
运行结果:
func test07() {
slice1 := []string{"apple", "orange", "grape", "mango", "water melon", "pine apple", "chikoo"}
for id, v := range slice1 {
fmt.Printf("id:%v, value:%v\n", id, v)
}
}
运行结果:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。