在覆盖切片时从切片中移除项目的最佳方法是什么?
例如:
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.