在golang中从切片中查找和删除元素

Posted

技术标签:

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

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

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

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

【问题讨论】:

【参考方案1】:

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

p := []int1, -13, 9, 6, -21, 125
j := 0

for _, n := range p 
    if n >= 0 
        p[j] = n
        j++
    

p = p[:j]

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

p := []int1, -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

【讨论】:

以上是关于在golang中从切片中查找和删除元素的主要内容,如果未能解决你的问题,请参考以下文章

golang 从切片中删除元素

Golang入门到项目实战 | go语言切片元素的添加和删除copy

golang:从切片中删除一个元素

golang:从切片中删除一个元素

Golang 删除切片指定元素

Golang 删除切片指定元素