这是我想要的结果
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 许可协议
7 回答5.4k 阅读
6 回答7k 阅读✓ 已解决
4 回答2.4k 阅读
1 回答3.4k 阅读
2 回答967 阅读✓ 已解决
2 回答2.3k 阅读
1 回答2.2k 阅读
根据切片的大小,不同的解决方案可能是最好的。
我的回答假设顺序无关紧要。
使用简单循环,仅用于较小的切片:
输出:
游乐场: http ://play.golang.org/p/KHTmJcR4rg