【问题标题】:Find and delete elements from slice in golang在golang中从切片中查找和删除元素
【发布时间】:2018-06-15 19:54:38
【问题描述】:

我有一些像[1, -13, 9, 6, -21, 125] 这样的数字。我想找到小于零的元素然后删除它们。

可以通过简单的方式完成: 只需遍历切片,如果元素小于零-> 删除它。但它的计算成本很高,因为每一步都可能发生切片变化。

有没有像numpy.where(array, condition)numpy.delete 这样优雅的方法?

【问题讨论】:

    标签: go slice


    【解决方案1】:

    将幸存的元素复制到切片的开头,完成后重新切片。

    p := []int{1, -13, 9, 6, -21, 125}
    j := 0
    
    for _, n := range p {
        if n >= 0 {
            p[j] = n
            j++
        }
    }
    p = p[:j]
    

    没有分配内存,但修改了原始切片。如果无法修改原始切片,则分配并复制到新切片:

    p := []int{1, -13, 9, 6, -21, 125}
    j := 0
    q := make([]int, len(p))
    for _, n := range p {
        if n >= 0 {
            q[j] = n
            j++
        }
    }
    q = q[:j] // q is copy with numbers >= 0
    

    playground example

    【讨论】:

      猜你喜欢
      • 2016-03-10
      • 2016-09-16
      • 1970-01-01
      • 2019-10-17
      • 1970-01-01
      • 2019-02-05
      • 1970-01-01
      相关资源
      最近更新 更多