如何根据比较遍历两个切片并删除多个索引?我尝试了以下操作,但会导致错误“恐慌:运行时错误:切片边界超出范围”。package mainimport ( "fmt")func main() { type My struct { SomeVal string } type Other struct { OtherVal string } var MySlice []My var OtherSlice []Other MySlice = append(MySlice, My{SomeVal: "abc"}) MySlice = append(MySlice, My{SomeVal: "mno"}) MySlice = append(MySlice, My{SomeVal: "xyz"}) OtherSlice = append(OtherSlice, Other{OtherVal: "abc"}) OtherSlice = append(OtherSlice, Other{OtherVal: "def"}) OtherSlice = append(OtherSlice, Other{OtherVal: "xyz"}) for i, a := range MySlice { for _, oa := range OtherSlice { if a.SomeVal == oa.OtherVal { MySlice = MySlice[:i+copy(MySlice[i:], MySlice[i+1:])] } } } fmt.Println(MySlice)}http://play.golang.org/p/4pgxE3LNmx注意:如果仅找到一个匹配项,则上述方法有效。当找到两个匹配项时会发生错误。
1 回答
达令说
TA贡献1821条经验 获得超6个赞
好的,就是这样,一旦从切片中删除索引,剩余的索引就会移动位置,从而使循环计数关闭。该问题已通过递减循环计数变量解决。
for i := 0; i < len(MySlice); i++ {
for _, oa := range OtherSlice {
if MySlice[i].SomeVal == oa.OtherVal {
MySlice = append(MySlice[:i], MySlice[i+1:]...)
i--
break
}
}
}
- 1 回答
- 0 关注
- 125 浏览
添加回答
举报
0/150
提交
取消