从切片中删除项目的最佳方法是什么?例如: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一旦您开始从切片中删除,最终会被设置为错误的元素。
繁花如伊
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:]...)
}
}
- 3 回答
- 0 关注
- 196 浏览
添加回答
举报
0/150
提交
取消