我有一片結構,每個結構都有兩個字段。如果僅在第一個字段中存在重復值,我想從切片中刪除一個結構。我嘗試在循環、映射和排序中使用循環,但我無法弄清楚。如果兩個字段與另一個結構具有相同的值,我最接近的是從切片中刪除一個結構,但如果第一個字段與切片中的另一個結構具有相同的值,我需要刪除它。當結構中的所有字段都具有相同的值時,網上有很多這樣的例子,但我沒有找到任何我正在描述的情況。我正在處理的實際程序要復雜得多,它需要我使用一片結構。我在下面做了一個簡化的例子,它觸及了問題的核心。它輸出[{one 1} {one 2} {five 5}]所需的輸出是[{one 1} {five 5}]預先感謝您的幫助。import "fmt"type myKey struct { key string num int}type myKeysList []myKeyfunc remDupKeys(m myKeysList) myKeysList { keys := make(map[myKey]bool) list := myKeysList{} for _, entry := range m { if _, value := keys[entry]; !value { keys[entry] = true list = append(list, entry) } } return list}func main() { one := myKey{"one", 1} two := myKey{"one", 1} three := myKey{"one", 2} four := myKey{"one", 1} five := myKey{"five", 5} myKeysList := myKeysList{one, two, three, four, five} fmt.Println(myKeysList) uList := remDupKeys(myKeysList) fmt.Println(uList)}去游樂場鏈接https://play.golang.org/p/x8sNjW_mxrl
1 回答

婷婷同學_
TA貢獻1844條經驗 獲得超8個贊
問題中的基本思想是正確的:在地圖中記錄訪問過的值并跳過地圖中已經存在的值。
要基于結構中的單個字段刪除重復項,請使用該字段作為映射鍵:
func remDupKeys(m myKeysList) myKeysList {
keys := make(map[string]bool)
list := myKeysList{}
for _, entry := range m {
if _, ok := keys[entry.key]; !ok {
keys[entry.key] = true
list = append(list, entry)
}
}
return list
}
- 1 回答
- 0 關注
- 95 瀏覽
添加回答
舉報
0/150
提交
取消