Golang で配列の共通部分を取得するには 3 つの方法があります: fmt パッケージの Sprint と Scanf を使用して配列を文字列に変換し、ある文字列内で別の文字列を含む要素を検索します。map パッケージを使用してキーを別の文字列として持つマップ、配列内の要素を検索し、その要素がマップ内にあるかどうかを確認します。math/big パッケージを使用して配列を big integer として保存し、論理演算子を使用して交差の計算を行います。
配列交差とは、ある配列に含まれるすべての要素を別の配列で見つけることを指します。この記事では、Go 言語で配列交差演算を実行する 3 つの方法を詳しく説明し、実際のケースを通じてその使用法を示します。
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] }
以上が詳細: Golang での配列交差操作の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。