[英]list indices must be integers or slices, not decimal.Decimal - Using zip() function to take multiple iterables simultaneously
[英]Go: compare two slices and delete multiple indices
如何根據比較結果循環兩個切片並刪除多個索引? 我嘗試了以下操作,但會導致錯誤“出現緊急情況:運行時錯誤:切片范圍超出范圍”。
package main
import (
"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
注意:如果僅找到一個匹配項,則上述方法有效。 發現兩個匹配項時發生錯誤。
好的,事情就這樣了,一旦從切片中刪除了索引,剩下的索引就會移動位置,從而使循環計數消失。 通過減少循環計數變量可以解決此問題。
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
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.