文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-04-04 09:48

关注

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

以上就是深入探讨:Golang 中的数组交集操作的详细内容,更多请关注编程网其它相关文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯