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 关注
- 90 浏览
添加回答
举报