第四章 go语言 数组、切片和映射 (7)

fmt.Println(slice1, len(slice1), cap(slice1))

fmt.Println(slice2, len(slice2), cap(slice2))

fmt.Println(slice3, len(slice3), cap(slice3))

打印结果:

[0 0 0 0 0] 5 5

[0 0 0 0 0] 5 10

[1 2 3 4 5] 5 5

 

与数组相同,slice操作不能超出len指定的范围。

slice := make([]int, 5, 10)

slice[3] = 10 //正确

slice[8] = 8 //错误 ,索引超出范围

 

 

 

4 切片的遍历

切片的遍历与数组的遍历方式相同。

5 切片不能比较

与数组不同的是slice之间不能比较,因此我们不能使用==操作符来判断两个slice是否含有全部相等的元素。不过标准库提供了高度优化的bytes.Equal函数两个字节型slice是否相等,但是对于其它类型的slice,我们必须自己展开每个元素进行比较。

切片可遍历,可修改,不可比较

6 判断切片是否为空

使用len(s)==0来判断一个slice是否为空。

7 追加元素

内置的append函数用于向slice追加元素。可以直接追加元素,也可以追加一个slice。注意参数slice后有...。否则有语法错误。因为append()函数的语义是从第二个参数开始都应该是待附加的元素。slice后加...意味将slice的元素全部打散后传入。数组切片会自动处理存储空间不足的问题。如果追加的内容长度超过当前已分配的存储空间(即cap()调用返回的信息),数组切片会自动分配一块足够大的内存。 

slice := make([]int, 5, 10)

slice = append(slice, 1, 2, 3)

fmt.Println(slice)

slice2 := []int{4, 5, 6}

slice = append(slice, slice2...)

fmt.Println(slice)

打印结果:

[0 0 0 0 0 1 2 3]

[0 0 0 0 0 1 2 3 4 5 6]

 

 

8 切片复制

内置的copy函数用于数组切片的复制。复制时无需考虑目标数组和源数组的长度。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsxdzw.html