golang中獲取數組交集有三種方法:使用fmt包的sprint和scanf將數組轉換為字符串,并查找一個字符串中包含另一個字符串的元素;使用map包創建一個映射,鍵為另一個數組中的元素,并檢查元素是否在映射中;使用math/big包將數組存儲為大整數,并使用邏輯運算符進行交集計算。
深入探討:Golang 中的數組交集操作
數組交集是指在一個數組中找到另一數組中包含的所有元素。本篇文章將深入探討 Go 語言中執行數組交集操作的三種方法,并通過一個實戰案例來展示其用法。
方法 1:fmt 包中的 Sprint 和 Scanf
package main
import (
"fmt"
"strings"
)
func main() {
// 數組 1
a1 := []int{1, 2, 3, 4, 5}
// 數組 2
a2 := []int{2, 3, 5, 6, 7}
// 轉換數組 1 為字符串
s1 := fmt.Sprint(a1)
// 轉換數組 2 為字符串
s2 := fmt.Sprint(a2)
// 尋找數組 1 字符串中的數組 2 元素,并刪除重復項
intersection := []int{}
for _, v := range strings.Split(s2, " ") {
if strings.Contains(s1, v) && !contains(intersection, v) {
intersection = append(intersection, v)
}
}
fmt.Println(intersection) // 輸出: [2 3 5]
}
// contains 函數檢查元素 v 是否在數組 intersection 中
func contains(a []int, v int) bool {
for _, x := range a {
if x == v {
return true
}
}
return false
}
登錄后復制
方法 2:map 包
package main
import (
"fmt"
"strings"
)
func main() {
// 數組 1
a1 := []int{1, 2, 3, 4, 5}
// 數組 2
a2 := []int{2, 3, 5, 6, 7}
// 創建一個映射,鍵為數組 2 中的元素,值為 true
m := make(map[int]bool)
for _, v := range a2 {
m[v] = true
}
// 檢查數組 1 中的元素是否也在映射中,并將其添加到交集中
intersection := []int{}
for _, v := range a1 {
if m[v] {
intersection = append(intersection, v)
}
}
fmt.Println(intersection) // 輸出: [2 3 5]
}
登錄后復制
方法 3:math/big 包
package main
import (
"fmt"
"math/big"
)
func main() {
// 數組 1
a1 := []int{1, 2, 3, 4, 5}
// 數組 2
a2 := []int{2, 3, 5, 6, 7}
// 使用 big.Int 存儲大整數
intersection := &big.Int{}
set1 := new(big.Int)
for _, v := range a1 {
set1.SetUint64(uint64(v))
intersection.Or(intersection, set1)
}
set2 := new(big.Int)
for _, v := range a2 {
set2.SetUint64(uint64(v))
intersection.And(intersection, set2)
}
result := []int{}
for i := 0; i < int(intersection.BitLen()); i++ {
if intersection.Bit(uint(i)) == 1 {
result = append(result, i+1)
}
}
fmt.Println(result) // 輸出: [2 3 5]
}
登錄后復制
實戰案例:查找兩個數組中重疊的單詞
package main
import (
"fmt"
"strings"
)
func main() {
// 數組 1:文章中的單詞
a1 := []string{"hello", "world", "golang", "programming", "language"}
// 數組 2:用戶搜索的關鍵詞
a2 := []string{"world", "javascript", "golang", "<a style='color:#f60; text-decoration:underline;' href="https://www.php.cn/zt/15730.html" target="_blank">python</a>"}
// 使用 fmt 包中的 Sprint 和 Scanf
intersection := []string{}
for _, v := range a2 {
if strings.Contains(strings.Join(a1, " "), v) && !contains(intersection, v) {
intersection = append(intersection, v)
}
}
fmt.Println(intersection) // 輸出: [world go lang]
}
登錄后復制






