Rumah >pembangunan bahagian belakang >Golang >Deep Dive: Operasi Persimpangan Susunan di Golang
Terdapat tiga cara untuk mendapatkan persilangan tatasusunan dalam Golang: gunakan Sprint dan Scanf pakej fmt untuk menukar tatasusunan kepada rentetan dan cari elemen dalam satu rentetan yang mengandungi rentetan lain gunakan pakej peta untuk mencipta peta; kunci sebagai elemen tatasusunan lain dalam peta dan semak jika elemen itu berada dalam peta; gunakan pakej matematik/besar untuk menyimpan tatasusunan sebagai integer besar dan gunakan operator logik untuk pengiraan persimpangan.
Persimpangan tatasusunan merujuk kepada mencari semua elemen yang terkandung dalam satu tatasusunan dalam tatasusunan lain. Artikel ini akan menyelidiki tiga kaedah untuk melaksanakan operasi persilangan tatasusunan dalam bahasa Go dan menunjukkan penggunaannya melalui kes praktikal.
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 }
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] }
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", "python"} // 使用 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] }
Atas ialah kandungan terperinci Deep Dive: Operasi Persimpangan Susunan di Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!