golang-set

golang-set

完善Go语言的通用集合功能

golang-set为Go语言提供了通用集合功能。该库支持泛型语法,提供线程安全和非线程安全实现,模仿Python的set功能。它拥有完整的测试套件,被以太坊和Docker等项目采用。golang-set简化了集合数据管理,减少了冗余代码,适用于多种可比较类型数据。

golang-setGo语言集合实现泛型开源项目Github

示例工作流程 Go报告卡 GoDoc

golang-set

Go语言中缺失的"泛型"集合。在Go内置集合之前...请使用这个。

  • 你好,👋!你是否使用或对Andrew Kelley创建的Zig编程语言感兴趣?如果是的话,golang-set项目有了一个新的兄弟项目:ziglang-set!快来看看吧!

2023年3月5日更新

  • 打包版本:2.2.0发布包括重构以最小化指针间接引用,更好的方法文档标准,以及一些构造函数便利方法,以提高添加项目Append或从现有Map创建新集合时的人体工程学。
  • 支持新泛型语法
  • Go 1.18.0或更高版本
  • 工作流在Go 1.20上测试

使用泛型

从Python转过来,我最怀念的东西之一就是那个极其出色的集合类型。这是我尝试模仿Python中集合类型的主要特性。当然,你可以争辩说Go不需要集合,否则创作者就会将其添加到标准库中。对于那些人,我只想说请忽略这个仓库,继续前进;对于其他觉得这个有用的人,请帮助我通过提出建议或PR来使它变得更好。

安装

使用go get安装此包。

go get github.com/deckarep/golang-set/v2

特性

  • 基于泛型的实现(需要Go 1.18或更高版本)
  • 两种实现共用一个通用接口
    • 一个非线程安全的实现,侧重性能
    • 一个线程安全的实现,适合并发使用
  • 功能完整的集合实现,模仿Python的集合实现
  • 全面的单元测试和基准测试套件

受信赖

这个包被许多公司和成千上万的开源包信赖。以下是一些使用这个包的示例用户。

  • 使用这个包的知名项目/公司
    • Ethereum
    • Docker
    • 1Password
    • Hashicorp

星标历史

星标历史图表

使用方法

下面的代码演示了Set集合如何更好地管理数据,实际上最小化了代码中的样板代码和不必要的循环。这个包现在完全支持泛型语法,所以你现在可以为任何可比较类型的对象实例化一个集合。

在Go中,什么被认为是可比较的?

  • 布尔值整数字符串浮点数或基本上的基本类型。
  • 指针
  • 数组
  • 结构体,如果它们的所有字段也都是独立可比较的

使用这个库就像创建一个线程安全或非线程安全的集合并为集合的实例化提供一个可比较类型一样简单。

// 语法示例,不能编译。 mySet := mapset.NewSet[T]() // 其中T是某个具体的可比较类型。 // 因此这段代码创建了一个int集合 mySet := mapset.NewSet[int]() // 或者你可能想要一个字符串集合 mySet := mapset.NewSet[string]() type myStruct struct { name string age uint8 } // 或者是一个结构体集合 mySet := mapset.NewSet[myStruct]() // 最后是一个可以容纳任何东西的集合,使用any或空接口关键字:interface{}。这实际上移除了类型安全。 mySet := mapset.NewSet[any]()

综合示例

package main import ( "fmt" mapset "github.com/deckarep/golang-set/v2" ) func main() { // 创建一个基于字符串的必修课程集合。 required := mapset.NewSet[string]() required.Add("烹饪") required.Add("英语") required.Add("数学") required.Add("生物") // 创建一个基于字符串的科学课程集合。 sciences := mapset.NewSet[string]() sciences.Add("生物") sciences.Add("化学") // 创建一个基于字符串的选修课程集合。 electives := mapset.NewSet[string]() electives.Add("焊接") electives.Add("音乐") electives.Add("汽车") // 创建一个基于字符串的额外编程课程集合。 bonus := mapset.NewSet[string]() bonus.Add("Go语言入门") bonus.Add("Python傻瓜教程") }

创建一个包含所有唯一课程的集合。 集合会自动去重相同的数据。

all := required .Union(sciences) .Union(electives) .Union(bonus) fmt.Println(all)

输出:

Set{烹饪, 英语, 数学, 化学, 焊接, 生物, 音乐, 汽车, Go语言入门, Python傻瓜教程}

烹饪被认为是科学课程吗?

result := sciences.Contains("烹饪") fmt.Println(result)

输出:

false

显示所有不是科学课程的课程,因为我不喜欢科学。

notScience := all.Difference(sciences) fmt.Println(notScience)
Set{音乐, 汽车, Go语言入门, Python傻瓜教程, 烹饪, 英语, 数学, 焊接}

哪些科学课程也是必修课程?

reqScience := sciences.Intersect(required)

输出:

Set{生物}

你们提供多少额外课程?

fmt.Println(bonus.Cardinality())

输出:

2

感谢访问!

-deckarep

编辑推荐精选

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

TRELLIS

TRELLIS

用于可扩展和多功能 3D 生成的结构化 3D 潜在表示

TRELLIS 是一个专注于 3D 生成的项目,它利用结构化 3D 潜在表示技术,实现了可扩展且多功能的 3D 生成。项目提供了多种 3D 生成的方法和工具,包括文本到 3D、图像到 3D 等,并且支持多种输出格式,如 3D 高斯、辐射场和网格等。通过 TRELLIS,用户可以根据文本描述或图像输入快速生成高质量的 3D 资产,适用于游戏开发、动画制作、虚拟现实等多个领域。

ai-agents-for-beginners

ai-agents-for-beginners

10 节课教你开启构建 AI 代理所需的一切知识

AI Agents for Beginners 是一个专为初学者打造的课程项目,提供 10 节课程,涵盖构建 AI 代理的必备知识,支持多种语言,包含规划设计、工具使用、多代理等丰富内容,助您快速入门 AI 代理领域。

AEE

AEE

AI Excel全自动制表工具

AEE 在线 AI 全自动 Excel 编辑器,提供智能录入、自动公式、数据整理、图表生成等功能,高效处理 Excel 任务,提升办公效率。支持自动高亮数据、批量计算、不规则数据录入,适用于企业、教育、金融等多场景。

下拉加载更多