猿问

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

从切片中删除项目的最佳方法是什么?


例如:


type MultiDataPoint []*DataPoint


func (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)

}


繁华开满天机
浏览 197回答 3
3回答

江户川乱折腾

可能有更好的方法,但这里有一个从切片中删除偶数值的示例:m := []int{1,2,3,4,5,6}deleted := 0for 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一旦您开始从切片中删除,最终会被设置为错误的元素。

繁花如伊

我很久以前就知道它的答案,但我在其他语言中使用了类似的东西,但我不知道它是否是 golang 的方式。只需从后到前迭代,这样您就不必担心删除的索引。我正在使用与 Adam 相同的示例。m = []int{3, 7, 2, 9, 4, 5}for i := len(m)-1; i >= 0; i-- {&nbsp; &nbsp; if m[i] < 5 {&nbsp; &nbsp; &nbsp; &nbsp; m = append(m[:i], m[i+1:]...)&nbsp; &nbsp; }}
随时随地看视频慕课网APP

相关分类

Go
我要回答