深入探讨:Golang 中的数组交集操作
golang中获取数组交集有三种方法:使用fmt包的sprint和scanf将数组转换为字符串,并查找一个字符串中包含另一个字符串的元素;使用map包创建一个映射,键为另一个数组中的元素,并检查元素是否在映射中;使用math/big包将数组存储为大整数,并使用逻辑运算符进行交集计算。
深入探讨:Golang 中的数组交集操作数组交集是指在一个数组中找到另一数组中包含的所有元素。本篇文章将深入探讨 Go 语言中执行数组交集操作的三种方法,并通过一个实战案例来展示其用法。
方法 1:fmt 包中的 Sprint 和 Scanfpackage 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="/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]
}
声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至201542412@QQ.com举报,一经查实,本站将立刻删除。
下一篇:Go语言的面向对象特性解析
相关推荐
-
解惑PHP表格:元素的本质,列还是行?
php 表格元素的本质:表格结构:表格由 标签组成,行由 标签组成,单元格由 标签组成。列布局: 元素在一个 行内相邻排列,形成列。行布局: 元素在 中相邻排列,形成行。解惑 PHP 表格:
-
Golang 字符串解析及操作指南
字符串解析和操作分割字符串:split(s, sep) 使用分隔符分割字符串,割token(s, delims) 使用分隔符集合分割字符串,割tags(s) 使用空白字符分割字符串。操作字符串:`to
-
Golang 字符串修改详解:动态调整和可变性
golang 中的字符串虽然不可变,但可通过以下技术动态修改:使用字符串连接符连接字符串。使用字符串格式化创建新字符串。修改字符串底层字节切片。使用第三方库提供的可变字符串类型。GoLang 字符串修
-
用 Golang 正则表达式提升字符串处理能力
go 正则表达式可提升字符串处理能力,其语法遵循 posix 标准,提供了字符类、元字符、量词和分组等功能。创建正则表达式可使用 regexp.mustcompile 函数,匹配字符串可使用 matc
-
Golang 字符串处理秘籍:字符串的可变性与常用操作
go 语言中的字符串是不可变的,需要创建新字符串进行修改。常用操作包括:字符串连接、长度获取、比较、切片(取子字符串)、查找、替换、大小写转换、类型转换。实战案例中,演示了 url 解析和字符串模板的