Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Deep Dive: Operasi Persimpangan Susunan di Golang

Deep Dive: Operasi Persimpangan Susunan di Golang

WBOY
WBOYasal
2024-04-04 09:45:01521semak imbas

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.

深入探讨:Golang 中的数组交集操作

Selam dalam: Operasi persimpangan tatasusunan di Golang

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.

Kaedah 1: Sprint dan Scanf dalam pakej fmt

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
}

Kaedah 2: pakej peta

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]
}

Kaedah 3: matematik/pakej besar

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]
}

Kes praktikal: Cari perkataan bertindih dalam dua tatasusunan

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn