这是我想要的结果
slice1 := []string{"foo", "bar","hello"}
slice2 := []string{"foo", "bar"}
difference(slice1, slice2)
=> ["hello"]
我正在寻找两个字符串切片之间的区别!
原文由 samol 发布,翻译遵循 CC BY-SA 4.0 许可协议
这是我想要的结果
slice1 := []string{"foo", "bar","hello"}
slice2 := []string{"foo", "bar"}
difference(slice1, slice2)
=> ["hello"]
我正在寻找两个字符串切片之间的区别!
原文由 samol 发布,翻译遵循 CC BY-SA 4.0 许可协议
假设 Go 映射是 ~O(1),这是一个 ~O(n) 差分函数,它适用于未排序的切片。
// difference returns the elements in `a` that aren't in `b`.
func difference(a, b []string) []string {
mb := make(map[string]struct{}, len(b))
for _, x := range b {
mb[x] = struct{}{}
}
var diff []string
for _, x := range a {
if _, found := mb[x]; !found {
diff = append(diff, x)
}
}
return diff
}
原文由 peterwilliams97 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答1.3k 阅读
2 回答1.2k 阅读
2 回答1.2k 阅读
2 回答1.1k 阅读
3 回答778 阅读
2 回答942 阅读
1 回答836 阅读
根据切片的大小,不同的解决方案可能是最好的。
我的回答假设顺序无关紧要。
使用简单循环,仅用于较小的切片:
输出:
游乐场: http ://play.golang.org/p/KHTmJcR4rg