-4
A
回答
3
1
如果数组排序(因为它们看起来在你的问题中),有一种算法比通过每个元素更好。
选取a
的第一个元素,称之为x
。 二进制搜索b
第一个元素等于或大于x
。如果它们相同,则发现两个数组中都包含一个元素,如果不是,请将其作为新的x
。现在以相同的方式搜索a
的x
。重复,直到你用尽其中一个数组中的元素。
这可以简单地扩展到任意数量的数组(实际上,使用任意数量的数组写入更容易)。
这里有一个快速和肮脏的实施:
package main
import (
"fmt"
"sort"
)
func inter(arrs ...[]int) []int {
res := []int{}
x := arrs[0][0]
i := 1
for {
off := sort.SearchInts(arrs[i], x)
if off == len(arrs[i]) {
// we emptied one slice, we're done.
break
}
if arrs[i][off] == x {
i++
if i == len(arrs) {
// x was in all the slices
res = append(res, x)
x++ // search for the next possible x.
i = 0
}
} else {
x = arrs[i][off]
i = 0 // This can be done a bit more optimally.
}
}
return res
}
func main() {
a := []int{1, 2, 3, 4, 5, 7}
b := []int{5, 6, 7, 8, 9}
fmt.Println(inter(a, b))
}
0
package main
import (
set "github.com/deckarep/golang-set"
)
func array_intersect(a, b []interface{}) []interface{} {
return set.NewSetFromSlice(a).Intersect(set.NewSetFromSlice(b)).ToSlice()
}
func main() {
a := []interface{}{1, 2, 3, 4, 5, 7}
b := []interface{}{5, 6, 7, 8, 9}
println(array_intersect(a, b))
}
+0
通过使用set.Intersect:github.com/deckarep/golang-set,代码非常简单。 –
+0
我没有投票,但至少应该指出2个问题。 1)该解决方案使用引擎盖下的循环,2)'array_intersect'通常跟踪非唯一值,'[1,1,2,3]'和'[3,5,1,1] '应该是'[1,1,3]',而你的解决方案会给'[1,3]' – Akavall
0
package main
import (
"fmt"
"sort"
)
func array_intersect(a, b []int) []int {
ret := []int{}
lenA := len(a)
lenB := len(b)
if lenA == 0 || lenB == 0 {
return ret
}
sort.Ints(a)
sort.Ints(b)
var i, j int
for {
a = a[i:]
if i = sort.SearchInts(a, b[j]); i >= len(a) {
break
}
if a[i] == b[j] {
ret = append(ret, a[i])
}
if j++; j >= lenB {
break
}
}
return ret
}
func main() {
a := []int{5, 7, 1, 1, 2, 3, 4, 5, 7}
b := []int{1, 1, 5, 6, 7, 8, 9}
fmt.Printf("a=%v, b=%v", a, b)
fmt.Printf("%v\n", array_intersect(a, b))
fmt.Printf("a=%v, b=%v", a, b)
}
相关问题
- 1. 如何找到两个其他列表中的每个元素?
- 2. 如何将一个html元素粘贴到其他元素?
- 3. 如何找到一个列表元素
- 4. 如何找到在阵列中的多个元素 - JAVASCRIPT,ES6
- 5. 比较一个阵列中的所有元素与其他阵列
- 6. 2D阵列,其中每个元素是一个类元素
- 7. 计数在numpy的阵列的元素数量是每一个其他元件
- 8. 从阵列中移除元素,然后移动其他元素
- 9. 如何动态加载Li元素与其他Javascript阵列li
- 10. 如何评估阵列中的其他元素
- 11. 选择一个元素,其中有任何其他元素
- 12. 如何使一个透明元素与其他元素重叠?
- 13. 在矩阵中找到唯一元素
- 14. 如何通过嵌套在XPath其他元素中的CSS类找到元素?
- 15. 如何从两个其他阵列的元素中获取4个阵列的多个集合,但没有元素在相同阵列中两次
- 16. 如何比较阵列元素与ArrayList中另一个阵列的元素?
- 17. 如何找到一个小于另一个元素的元素?
- 18. 如何找到,如果Powershell的Array包含其他阵列
- 19. jQuery。只输出其他阵列上的唯一元素?
- 20. 从一个阵列,找了两个阵列映射,从一个数组元素
- 21. awk。为其他列中的每个元素找到唯一值计数
- 22. 从一个列表中获取元素并追加到其他
- 23. 如何查找多个元素在嵌入式阵列MongoDB中
- 24. 如何找到一个HTML元素
- 25. 在阵列到每个匹配元素
- 26. Selenium:找到“其他元素旁边的元素”
- 27. 如何将一个列表的元素与另一个python列表中的其他元素进行匹配?
- 28. MongoDB - 查找元素,其中字段至少等于一个值在阵列
- 29. 如何找到导致其他元素触发聚焦事件的元素?
- 30. 在其他阵列上随机显示一个阵列
我只是想找到像array_intersect为golang php.net/manual/en/function.array-intersect.php –
的效用函数没有内置的方法,但有一个库提供'set.intersect':https://github.com/deckarep/golang-set。但是,如果您查看实现,则会看到有一个for循环正在运行。 – Akavall
在所有可能的情况下,php效用函数本身使用foreach循环,如果您经常使用,请自己写下函数 – Pita