Go语言中缺失的"泛型"集合。在Go内置集合之前...请使用这个。
2.2.0发布包括重构以最小化指针间接引用,更好的方法文档标准,以及一些构造函数便利方法,以提高添加项目Append或从现有Map创建新集合时的人体工程学。新泛型语法1.18.0或更高版本1.20上测试
从Python转过来,我最怀念的东西之一就是那个极其出色的集合类型。这是我尝试模仿Python中集合类型的主要特性。当然,你可以争辩说Go不需要集合,否则创作者就会将其添加到标准库中。对于那些人,我只想说请忽略这个仓库,继续前进;对于其他觉得这个有用的人,请帮助我通过提出建议或PR来使它变得更好。
使用go get安装此包。
go get github.com/deckarep/golang-set/v2
这个包被许多公司和成千上万的开源包信赖。以下是一些使用这个包的示例用户。
下面的代码演示了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


免费创建高清无水印Sora视频
Vora是一个免费创建高清无水印Sora视频的AI工具


最适合小白的AI自动化工作流平台
无需编码,轻松生成可复用、可变现的AI自动化工作流

大模型驱动的Excel数据处理工具
基于大模型交互的表格处理系统,允许用户通过对话方式完成数据整理和可视化分析。系统采用机器学 习算法解析用户指令,自动执行排序、公式计算和数据透视等操作,支持多种文件格式导入导出。数据处理响应速度保持在0.8秒以内,支持超过100万行数据的即时分析。


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


AI论文写作指导平台
AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。


AI一键生成PPT,就用博思AIPPT!
博思AIPPT,新一代的AI生成PPT平台,支持智能生成PPT、AI美化PPT、文本&链接生成PPT、导入Word/PDF/Markdown文档生成PPT等,内置海量精美PPT模板,涵盖商务、教育、科技等不同风格,同时针对每个页面提供多种版式,一键自适应切换,完美适配各种办公场景。


AI赋能电商视觉革命,一站式智能商拍平台
潮际好麦深耕服装行业,是国内AI试衣效果最好的软件。使用先进AIGC能力为电商卖家批量提供优质的、低成本的商拍图。合作品牌有Shein、Lazada、安踏、百丽等65个国内外头部品牌,以及国内10万+淘宝、天猫、京东等主流平台的品牌商家,为卖家节省将近85%的出图成本,提升约3倍出图效率,让品牌能够快速上架。


企业专属的AI法律顾问
iTerms是法大大集团旗下法律子品牌,基于最先进的大语言模型(LLM)、专业的法律知识库和强大的智能体架构,帮助企业扫清合规障碍,筑牢风控防线,成为您企业专属的AI法律顾问。


稳定高效的流量提升解决方案,助力品牌曝光
稳定高效的流量提升解决方案,助力品牌曝光


最新版Sora2模型免费使用,一键生成无水印视频
最新版Sora2模型免费使用,一键生成无水印视频
最新AI工具、AI资讯
独家AI资源、AI项目落地

微信扫一扫关注公众号