在Go中迭代时,从切片中删除条目

 Z先生286_158 发布于 2023-02-11 11:47

在覆盖切片时从切片中移除项目的最佳方法是什么?

例如:

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)
}

tomasz.. 39

正如您在其他地方提到的那样,您可以分配新的内存块并仅将有效元素复制到其中.但是,如果要避免分配,可以就地重写切片:

i := 0 // output index
for _, x := range s {
    if isValid(x) {
        // copy and increment index
        s[i] = x
        i++
    }
}
s = s[:i]

完整示例:http://play.golang.org/p/FNDFswPeDJ

请注意,它会i在基础数组中的索引之后留下一些垃圾,因此请确保没有其他切片使用elswhere.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有