Go语言Set数据结构的实现方式与实战应用

键盘旁的猫
键盘旁的猫
发布时间:2026-10-13| 5人浏览过
原创

Go 语言标准库中没有原生的 Set 集合类型,开发者通常借助 map 的键(Key)不可重复这一特性来模拟集合。本文将解析如何在 Go 中高效实现 Set,并通过处理两个数组求交集的实际案例,展示其具体的操作流程。

借助 map 实现 Set

由于 map 的 Key 具有唯一性,因此可以将需要存储的元素作为 Key,Value 设置为空结构体。这样既实现了集合的去重功能,又保证了极低的内存开销。

第1步:定义空结构体

目的:用于减少内存占用。
动作:定义一个空的 struct。因为空结构体在 Go 语言中不占据任何内存空间,这比使用 bool 或 int 等类型更节省资源。

type empty struct {
}

第2步:初始化 Map 集合

入口:代码逻辑起始处
动作:创建一个 Key 为字符串类型,Value 为空结构体的 map。

set := make(map[string]empty)

第3步:执行增、删、查操作

参数:待插入的 key 和 value
重要参数:使用 unsafe.Sizeof() 可以验证内存占用的大小差异。
可观察状态:通过赋值实现添加;通过 delete() 函数实现删除;通过 m[key] 的返回值判断存在与否。

// ADD - 添加元素
set["foo"] = empty{}

// DELETE - 删除元素
delete(set, "foo")

// size - 获取集合规模
size := len(set)

// check - 判断是否存在 (第二个返回值 exist 为 bool 类型,表示是否存在)
_, exist := set["foo"]

算法应用:求两个数组的交集

在处理两个整数数组的交集问题时,利用上述实现的 Set 可以非常优雅地解决去重问题。核心思路是:将第一个数组的所有元素存入 Map,然后遍历第二个数组,若元素存在于 Map 中则加入结果集并从 Map 中移除,以防止结果集中出现重复项。

第1步:初始化数据结构

目的:准备存放第一个数组元素的容器及结果切片。
动作:创建长度为 0 的 map[int]empty 以及 []int 切片。

func SectionWithTwoArray(num1, num2 []int) []int {
    set := make(map[int]empty)
    var res []int
    // ... 后续步骤

第2步:处理第一个数组(去重)

入口:遍历 num1 切片
动作:检查当前值是否已存在于 set 中。如果不存在,将其添加到 set 中。这一步完成了对 num1 内部重复元素的处理。

for _, v := range num1 {
    if _, ok := set[v]; !ok {
        set[v] = empty{}
    }
}

第3步:处理第二个数组并求交集

入口:遍历 num2 切片
注意:此处的逻辑要求输入的 num1 必须已经是去重后的集合,或者代码中需要对两者同时去重。根据代码实现,此处假设 num1 中的元素已处理入 Map,num2 中若存在该元素且未被标记删除,则为交集元素。

for _, v := range num2 {
    if _, ok := set[v]; ok {
        res = append(res, v)
        // 立即删除,防止 num2 中存在多次同一个交集元素时导致结果重复
        delete(set, v)
    }
}
return res
}

通过这种“先存后删”的策略,能够确保最终得到的交集结果不包含重复元素,且代码逻辑清晰,性能表现良好。

以上就是Go语言实现Set数据结构及其在算法中应用的详细内容,更多关于Go语言集合操作的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。