文章预览
切片,这是一个在go语言中引入的新的理念。它有一些特征如下:
对数组抽象
数组长度不固定
可追加元素
切片容量可增大
容量大小成片增加
我们先把上面的理念整理在这里,但是实际的还是要撸码来解决问题。
定义或申明切片
首先我们看看申明切片:
var sliceName []type
定义完成后,我们需要定义切片:
sliceName = make ([]type , len )
也可以适当简写:
sliceName := make ([]type , len )
在上面的例子中,我们申明了一个切片,我们现在先运行看看结果。
package main
import "fmt"
func main () {
sliceName := make ([]string , 3 )
fmt.Printf("切片slice_name的长度:len=%d \n" , len (sliceName))
}
那么看到这里小伙伴们是不是发现切片,也就是我们普通的一个数组,那么它凭什么叫做切片呢?
我么可以看到另外一个make函数: make([]T, length, capacity)
在上面的capacity是数组的容量,length则是数组的长度。当新插入元素后长度超过容量,则会自动增加一个容量来填装数据,但是切片的空间大小是 capacity的整数倍 。demo如下:
package main
import "fmt"
func main () {
sliceName := make ([]string , 3 , 15 )
fmt.Printf("切片slice_name的长度:len=%d cap=%d \n" , len (sliceName), cap (sliceName))
sliceName[0 ] = "程先生"
fmt.Println(sliceName)
}
初始化切片
任何变量或常量在使用之前都需要初始化,不过常量是直接把申明和初始化写在一起的。我们来看看切片的初始化:
arr := [] int {1 , 2 , 3 }
fmt.Println(arr)
sliceName := arr[:]
fmt.Println(sliceName)
sliceName1 := arr[1 :3 ]
fmt.Println(sliceName1)
当然切片也会存在空对象nil的情况,在你申明后不初始化的情况下则会产生nil。
切片的增删改查
当我们创建了一个切片后,我们需要对切片的元素进行增加该怎么办呢?
我们可以看到内置append函数: func append(slice []Type, elems ...Type) []Type,代码如下:
sliceName = append (sliceName, 4 )
fmt.Println(sliceName)
当然我们顺带看下 copy函数如下:
func copy (dst, src []Type) int
// 上面的说明中指出 我们目标切片接受源数组,并且返回被拷贝的元素个数。
当然,go语言并没有提供内置的remove函数,但是我们可以通过append函数实现,如下:
sliceName = append (sliceName[:position],sliceName[position+1 :]...)
总结
切片其实就是数组
切片的数组大小是能够变化的
切片的容量增加是整数倍的
任何对象都有可能为空nil
内置函数append和copy的使用
如果你认可我所做的事情,并且认为我做的事对你有一定的帮助,希望你也能打赏我一杯咖啡,谢谢。
………………………………