slice名为切片,是Go中的可变长数组,是对底层数组的封装和引用。切片指向一个底层数组,并且包含长度和容量信息。未初始化切片的值为 nil。作用于切片的内建函数主要有四个,分别是make、len、cap与append。make用于创建切片,len获取切片的长度,cap获取切片的容量,append向切片追加元素。
package main
import "fmt"
func main() {
//创建切片,make([]T, length, capacity)
fib := make([]int, 0, 10)
fmt.Println("len(fib)=", len(fib))
fmt.Println("cap(fib)=", cap(fib))
fib = append(fib, []int{1, 1, 2, 3, 5, 8, 13}...)
fmt.Println("fib=",fib)
}
输出结果:
len(fib)= 0
cap(fib)= 10
fib= [1 1 2 3 5 8 13]
//@brief:slice:任意类型的切片指针;index:需要插入的下标;value:待插入元素值
func insert(slice *[]interface{}, index int, value interface{}) {
if index > len(*slice) {
return
}
//尾部追加元素,使用append函数
if index == len(*slice) {
*slice = append(*slice, value)
return
}
*slice = append((*slice)[:index+1], (*slice)[index:]...)
(*slice)[index] = value
}
func main() {
fib := make([]interface{}, 0, 10)
//切片头部插入元素
insert(&fib, 0, 1)
fmt.Println("fib =",fib)
}
输出结果:
fib = [1]
func delete(slice *[]interface{}, index int) {
if index > len(*slice) - 1 {
return
}
*slice = append((*slice)[:index], (*slice)[index+1:]...)
}
func main() {
fib := []interface{}{1, 1, 2, 3, 5, 8}
//删除切片最后一个元素
delete(&fib, len(fib) - 1)
fmt.Println("fib =",fib)
}
输出结果:
fib = [1 1 2 3 5]
func update(slice *[]interface{}, index int, value interface{}) {
if index > len(*slice) - 1 {
return
}
(*slice)[index] = value
}
func search(slice []interface{}, value interface{}) []int {
var index []int
for i, v := range slice {
if v == value {
index = append(index, i)
}
}
return index
}
func main() {
fib := []interface{}{1, 1, 2, 3, 5, 8}
indexSlice := search(fib, 1)
fmt.Println("indexSlice =", indexSlice)
}
输出结果:
indexSlice = [0 1]