美文网首页Golang进阶
【Golang】删除一个slice中的一个或多个元素,以及sli

【Golang】删除一个slice中的一个或多个元素,以及sli

作者: qishuai | 来源:发表于2018-01-25 10:32 被阅读196次

    其实这都是一些基础问题,但是自己总是忘记,在这里做个记录。

    1. 删除slice中的一个或多个元素

    s = append(s[:i], s[i+1:]...)

    我第一次看到这种结构时感觉很迷茫,其实可以分开来看。首先s[:i]相当于slice截取,也就是说s[:i]本身就是一个slice。然后s[i+1:]...相当于变长参数。append()函数内部,通过循环append()递归操作即可。s本身的长度会发生改变,因为append()参数的是一个新的slice,然后赋值给s。但是s的容量不会变化。

    1. slice共享问题
    • 首先,slice之间赋值,是共享了内存地址的,如果修改其中一个,另外一个也会修改。就像函数传递slice参数的效果。
    • 如果两个slice之间共享,如果其中一个slice的长度发生了改变,另一个slice的长度是不会发生改变的,改变的是内存中的数据。
    a1 := []int{1, 2, 3, 4, 5}
    a2 := a1
    
    a1 = append(a1[:1], a1[2:]...)
    
    fmt.Println(a2)
    fmt.Println(a1)
    
    //output:
    [1 3 4 5 5]
    [1 3 4 5]
    

    相关文章

      网友评论

        本文标题:【Golang】删除一个slice中的一个或多个元素,以及sli

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