2 回答

TA貢獻1785條經驗 獲得超8個贊
最好(更快)使用地圖來表示要刪除的項目。如果原始列表中有 N 個東西,待刪除列表中有 M 個東西,您的代碼(一旦錯誤被修復)將在 O(NM) 時間內運行,而基于地圖的解決方案將在準時。
這是示例代碼:
package main
import "fmt"
func filter(src []string, del map[string]bool) []string {
var dst []string
for _, s := range src {
if !del[s] {
dst = append(dst, s)
}
}
return dst
}
func main() {
src := []string{"A", "B", "C", "D"}
del := map[string]bool{"A": true, "B": true}
fmt.Println(filter(src, del))
}
如果確實需要將待刪除的東西做成slice,那么應該先將slice轉為map。那么代碼就是O(N+M)次了。

TA貢獻1804條經驗 獲得超3個贊
您需要做的是檢查原始項目中的每個項目是否存在于要刪除的項目列表中,如果不存在,則將其添加到結果中:
func removeString(listOri []string, targetDelete []string) []string {
newitems := []string{}
var found bool
for i := range listOri {
found = false
for j := range targetDelete {
if listOri[i] == targetDelete[j] {
found = true
break
}
}
if !found {
newitems = append(newitems, listOri[i])
}
}
return newitems
}
您可能還會發現Go 是否具有類似于 Python 的“if x in”構造?翔實的。
- 2 回答
- 0 關注
- 117 瀏覽
添加回答
舉報