为了账号安全,请及时绑定邮箱和手机立即绑定

如何在覆盖切片时从切片中删除项目?

如何在覆盖切片时从切片中删除项目?

Go
繁华开满天机 2021-07-09 14:06:55
从切片中删除项目的最佳方法是什么?例如:type MultiDataPoint []*DataPointfunc (m MultiDataPoint) Json() ([]byte, error) {    for i, d := range m {        err := d.clean()        if ( err != nil ) {            //Remove the DP from m        }    }    return json.Marshal(m)}
查看完整描述

3 回答

?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

可能有更好的方法,但这里有一个从切片中删除偶数值的示例:


m := []int{1,2,3,4,5,6}


deleted := 0

for i := range m {

    j := i - deleted

    if (m[j] & 1) == 0 {

        m = m[:j+copy(m[j:], m[j+1:])]

        deleted++

    } 

}

请注意,我没有使用i, d := range m语法获取元素,因为d一旦您开始从切片中删除,最终会被设置为错误的元素。


查看完整回答
反对 回复 2021-07-12
?
繁花如伊

TA贡献2012条经验 获得超12个赞

我很久以前就知道它的答案,但我在其他语言中使用了类似的东西,但我不知道它是否是 golang 的方式。


只需从后到前迭代,这样您就不必担心删除的索引。我正在使用与 Adam 相同的示例。


m = []int{3, 7, 2, 9, 4, 5}


for i := len(m)-1; i >= 0; i-- {

    if m[i] < 5 {

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

    }

}


查看完整回答
反对 回复 2021-07-12
  • 3 回答
  • 0 关注
  • 196 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信