美文网首页
golang数组append切片添加与删除

golang数组append切片添加与删除

作者: 沫明 | 来源:发表于2019-12-23 18:45 被阅读0次

    golang数组append切片添加

    package main
    
    import "fmt"
    
    func main()  {
        a := []int{1, 2, 3}
        a = append(a, 1)            // 追加1个元素
        a = append(a, 1, 2, 3)      // 追加多个元素, 手写解包方式
        a = append(a,[]int{11,11,11}...)    // 追加一个切片, 切片需要解包
        a = append([]int{22,22,22},a...)    // 在开头添加1个切片
        a = append(a[:0], append([]int{1,2,3}, a[0:]...)...) // 在第0个位置插入切片
        fmt.Println(a)
        for i:=0;i<len(a);i++{
            fmt.Println(a[i])
        }
    }
    

    golang数组删除元素

    1.从开头位置删除

    package main
    
    import "fmt"
    
    func main()  {
        //删除开头的元素可以直接移动数据指针:
        a := []int{1, 2, 3}
        a = a[1:] // 删除开头1个元素
        a = a[N:] // 删除开头N个元素
        fmt.Println(a)
    
        //也可以不移动数据指针,但是将后面的数据向开头移动,可以用 append 原地完成
        //(所谓原地完成是指在原有的切片数据对应的内存区间内完成,不会导致内存空间结构的变化):
        a = []int{1, 2, 3}
        a = append(a[:0], a[1:]...) // 删除开头1个元素
        a = append(a[:0], a[N:]...) // 删除开头N个元素
    
        //还可以用 copy() 函数来删除开头的元素:
        a = []int{1, 2, 3, ...}
        a = append(a[:i], a[i+1:]...) // 删除中间1个元素
        a = append(a[:i], a[i+N:]...) // 删除中间N个元素
        a = a[:i+copy(a[i:], a[i+1:])] // 删除中间1个元素
        a = a[:i+copy(a[i:], a[i+N:])] // 删除中间N个元素
    }
    

    2.从中间位置删除

    func main()  {
        //对于删除中间的元素,需要对剩余的元素进行一次整体挪动,同样可以用 append 或 copy 原地完成:
        a = []int{1, 2, 3, ...}
        a = append(a[:i], a[i+1:]...) // 删除中间1个元素
        a = append(a[:i], a[i+N:]...) // 删除中间N个元素
        a = a[:i+copy(a[i:], a[i+1:])] // 删除中间1个元素
        a = a[:i+copy(a[i:], a[i+N:])] // 删除中间N个元素
    }
    

    3.从尾部删除

    func main()  {
        a = []int{1, 2, 3}
        a = a[:len(a)-1] // 删除尾部1个元素
        a = a[:len(a)-N] // 删除尾部N个元素
    }

    相关文章

      网友评论

          本文标题:golang数组append切片添加与删除

          本文链接:https://www.haomeiwen.com/subject/xcltoctx.html