Karşılaştırmaya dayalı olarak iki dilimi nasıl çeviriyorsunuz ve birden çok dizini siliyorsunuz? Aşağıdakileri denedim, ancak bir hatayla sonuçlanır "panik: çalışma zamanı hatası: dilim sınırlarını dışında tutar."Git: iki dilimi karşılaştırın ve birden çok dizini silin
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
Not: yalnızca bir eşleşme bulunursa yukarıdaki çalışır. İki eşleşme bulunduğunda hata oluşur.
Yan not, yukarıdakiler yalnızca bir eşleşme bulunduğunda çalışır. İki eşleşme bulunduğunda hata oluşur. –
Olası yinelenen [Dilimlerdeki öğeleri kaldırın] (http://stackoverflow.com/questions/28699485/remove-elements-in-slice), ayrıca [Bir dilim içinde dilim öğesini kaldırın] (http://stackoverflow.com/ soruları/33495995/remove-slice-element-in-a-for için), ayrıca [golang içinde döngü içinde struct array öğesinin nasıl kaldırılacağı] (http://stackoverflow.com/questions/29005825/how-to-remove- elemanın-of-yapı-dizi-in-halka-in-golang). – icza
Evet, haklı olduğunu düşünüyorum. "Dilimdeki öğeleri kaldır" aynı sorunu giderir. –