golang中獲取數(shù)組交集有三種方法:使用fmt包的sprint和scanf將數(shù)組轉(zhuǎn)換為字符串,并查找一個字符串中包含另一個字符串的元素;使用map包創(chuàng)建一個映射,鍵為另一個數(shù)組中的元素,并檢查元素是否在映射中;使用math/big包將數(shù)組存儲為大整數(shù),并使用邏輯運算符進(jìn)行交集計算。
深入探討:Golang 中的數(shù)組交集操作
數(shù)組交集是指在一個數(shù)組中找到另一數(shù)組中包含的所有元素。本篇文章將深入探討 Go 語言中執(zhí)行數(shù)組交集操作的三種方法,并通過一個實戰(zhàn)案例來展示其用法。
方法 1:fmt 包中的 Sprint 和 Scanf
package main import ( "fmt" "strings" ) func main() { // 數(shù)組 1 a1 := []int{1, 2, 3, 4, 5} // 數(shù)組 2 a2 := []int{2, 3, 5, 6, 7} // 轉(zhuǎn)換數(shù)組 1 為字符串 s1 := fmt.Sprint(a1) // 轉(zhuǎn)換數(shù)組 2 為字符串 s2 := fmt.Sprint(a2) // 尋找數(shù)組 1 字符串中的數(shù)組 2 元素,并刪除重復(fù)項 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 函數(shù)檢查元素 v 是否在數(shù)組 intersection 中 func contains(a []int, v int) bool { for _, x := range a { if x == v { return true } } return false }
登錄后復(fù)制
方法 2:map 包
package main import ( "fmt" "strings" ) func main() { // 數(shù)組 1 a1 := []int{1, 2, 3, 4, 5} // 數(shù)組 2 a2 := []int{2, 3, 5, 6, 7} // 創(chuàng)建一個映射,鍵為數(shù)組 2 中的元素,值為 true m := make(map[int]bool) for _, v := range a2 { m[v] = true } // 檢查數(shù)組 1 中的元素是否也在映射中,并將其添加到交集中 intersection := []int{} for _, v := range a1 { if m[v] { intersection = append(intersection, v) } } fmt.Println(intersection) // 輸出: [2 3 5] }
登錄后復(fù)制
方法 3:math/big 包
package main import ( "fmt" "math/big" ) func main() { // 數(shù)組 1 a1 := []int{1, 2, 3, 4, 5} // 數(shù)組 2 a2 := []int{2, 3, 5, 6, 7} // 使用 big.Int 存儲大整數(shù) 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] }
登錄后復(fù)制
實戰(zhàn)案例:查找兩個數(shù)組中重疊的單詞
package main import ( "fmt" "strings" ) func main() { // 數(shù)組 1:文章中的單詞 a1 := []string{"hello", "world", "golang", "programming", "language"} // 數(shù)組 2:用戶搜索的關(guān)鍵詞 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] }
登錄后復(fù)制