Golang slice 增删改查

1.slice简介

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]

2.增加元素

//@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]

3.删除元素

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]

4.修改元素

func update(slice *[]interface{}, index int, value interface{}) {
	if index > len(*slice) - 1 {
       return  
    }
	(*slice)[index] = value
}

5.查找元素下标

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]

参考文献

[1]Go编程语言规范 [2]【Golang】slice删除元素的性能对比

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券