GoLang学习笔记(二十)切片的声明及遍历

版权声明:如需转载、粘贴内容,必须在转载和粘贴文中标明文章内容出至 https://blog.csdn.net/ynzcxx/article/details/86685401

Go语言的切片是对数组的抽象。
Go中的数组的长度不可以改变,Go中就提供了一个灵活、功能强悍的内置类型切片:动态数组。
与数组相比切片的长度是不固定的,可以追加元素。
切片本身没有任何数据,他们只是对现有数组的引用。
切片与数组相比,不需要设定长度,在[]中不用设置值。
从概念上来说,切片slice像一个结构体,这个结构体包含了三个元素:
1、指针,只想数组中slice指定的开始位置
2、长度,即slice的长度
3、最大长度,也就是slice开始位置到数组最后位置的长度

声明一个切片:
var 变量名 []变量类型
切片不需要说明长度,所以未初始化的切片为空切片,该默认切片为nil,长度为0

var s1 []int

用make()函数来创建切片:
1、var 变量名 []变量类型 = make([]变量类型,长度)
2、简写:变量名 := make([]变量类型,长度)
3、可以指定容量,且容量参数是可选参数:变量名 := make([]变量类型,长度、容量)

var s2 = make([]int, 5)
var s3 = make([]int, 4, 6)
s4 := make([]int, 5)
s5 := make([]int, 4, 6)

直接初始化:

a := []int{1,2,3}

通过数组截取来初始化切片:
arr := [5]int{1,2,3,4,5}
1、包含数组中所有元素
    a := arr[:]
2、从一个下标到另一个下标-1
    a := arr[开始的下标:结束的下标-1]
3、从一个指定的下标到最后一个元素
    a := arr[开始的下标:]
4、从开始的下标到指定的一个下标-1
    a := arr[:结束的下标-1]
通过截取切片来初始化切片:
    b := a[较小的下标:较大的下标]

func testSlice03(){
	nums1 := []int{0,1,2,3,4,5,6,7,8,9}
	printMsg(nums1)
	nums2 := nums1[1:4]
	printMsg(nums2)
	nums3 := nums1[:3]
	printMsg(nums3)
	nums4 := nums1[6:]
	printMsg(nums4)
}

运行结果:

len = 10 , cap = 10 , slice = [0 1 2 3 4 5 6 7 8 9]
len = 3 , cap = 9 , slice = [1 2 3]
len = 3 , cap = 10 , slice = [0 1 2]
len = 4 , cap = 4 , slice = [6 7 8 9]

可以从结果中的cap看出,nums2实际是删除了nums1[0],所以cap为9。
看num3,从头开始截取,虽然只有3个元素被截取出来了,但cap依然为10。
在看num4,实际是将第六个元素之前的元素都删除了,所以cap为4。
由此可以看出,截取后的cap是会有变化的。
综合以上3个例子,可以看出截取的切片,从指定开始截取的元素之前的元素,都会从cap中减去。

猜你喜欢

转载自blog.csdn.net/ynzcxx/article/details/86685401
今日推荐