go语言中有set集合吗
发表于:2024-12-03 作者:千家信息网编辑
千家信息网最后更新 2024年12月03日,本文小编为大家详细介绍"go语言中有set集合吗",内容详细,步骤清晰,细节处理妥当,希望这篇"go语言中有set集合吗"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。go语
千家信息网最后更新 2024年12月03日go语言中有set集合吗
本文小编为大家详细介绍"go语言中有set集合吗",内容详细,步骤清晰,细节处理妥当,希望这篇"go语言中有set集合吗"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
go语言没有set集合。Set是一个集合,set里的元素不能重复;golang的标准库中没有对set的操作,但有两种实现方法:1、使用map实现,map中的key为唯一值,这与set的特性一致;2、使用golang-set包实现。
本教程操作环境:windows10系统、GO 1.11.2、Dell G3电脑。
Go中是不提供Set类型,Set是一个集合,set里的元素不能重复。但可以使用两种方法set集合:
map
golang-set
使用map实现
在Golang中通常使用map来实现set,map中的key为唯一值,这与set的特性一致。
简单实现,如下:
set := make(map[string]bool) // New empty setset["Foo"] = true // Addfor k := range set { // Loop fmt.Println(k)}delete(set, "Foo") // Deletesize := len(set) // Sizeexists := set["Foo"] // Membership
map的value值是布尔型,这会导致set多占用内存空间,解决这个问题,则可以将其替换为空结构。在Go中,空结构通常不使用任何内存。
unsafe.Sizeof(struct{}{}) // 结果为 0
优化后,如下:
type void struct{}var member voidset := make(map[string]void) // New empty setset["Foo"] = member // Addfor k := range set { // Loop fmt.Println(k)}delete(set, "Foo") // Deletesize := len(set) // Size_, exists := set["Foo"] // Membership
golang-set
golang-set-A simple set type for the Go language. Also used by Docker, 1Password, Ethereum.
在github上已经有了一个成熟的包,名为golang-set,包中提供了线程安全和非线程安全的set。提供了五个set函数:
// NewSet创建并返回空集的引用,结果集上的操作是线程安全的func NewSet(s ...interface{}) Set {}// NewSetFromSlice从现有切片创建并返回集合的引用,结果集上的操作是线程安全的func NewSetFromSlice(s []interface{}) Set {}// NewSetWith创建并返回具有给定元素的新集合,结果集上的操作是线程安全的func NewSetWith(elts ...interface{}) Set {}// NewThreadUnsafeSet创建并返回对空集的引用,结果集上的操作是非线程安全的func NewThreadUnsafeSet() Set {}// NewThreadUnsafeSetFromSlice创建并返回对现有切片中集合的引用,结果集上的操作是非线程安全的。func NewThreadUnsafeSetFromSlice(s []interface{}) Set {}
简单案例,如下:
package mainimport ( "fmt" "github.com/deckarep/golang-set")func main() { // 默认创建的线程安全的,如果无需线程安全 // 可以使用 NewThreadUnsafeSet 创建,使用方法都是一样的。 s1 := mapset.NewSet(1, 2, 3, 4) fmt.Println("s1 contains 3: ", s1.Contains(3)) fmt.Println("s1 contains 5: ", s1.Contains(5)) // interface 参数,可以传递任意类型 s1.Add("poloxue") fmt.Println("s1 contains poloxue: ", s1.Contains("poloxue")) s1.Remove(3) fmt.Println("s1 contains 3: ", s1.Contains(3)) s2 := mapset.NewSet(1, 3, 4, 5) // 并集 fmt.Println(s1.Union(s2))}
结果为:
s1 contains 3: trues1 contains 5: falses1 contains poloxue: trues1 contains 3: falseSet{1, 2, 4, poloxue, 3, 5}
读到这里,这篇"go语言中有set集合吗"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。
安全
线程
结果
语言
元素
文章
方法
一致
内存
内容
是非
特性
类型
结构
空集
妥当
成熟
使用方法
函数
参数
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
行业网络安全自查表填写
上海雅唐网络技术有限公司
网络安全保卫大队要出车吗
千朝互联网科技
SQL恢复数据库报错927
黑魂3服务器什么时候好
网站签名软件开发
描述计算机网络安全的定义
网站后台数据库管理系统
大专计算机网络技术有英语吗
怎样设置数据库权限
等级读取到是0不写入数据库
一个硕士毕业改行做软件开发
网络安全工程师的使命
python邮箱服务器
数据库是结构化的数据集合对吗
软件开发管理情绪低落
互联网科技界的巨头
查网站服务器ip
网络安全与服务可信还是不可信
济南博赛网络技术有限公司华为
2021网络安全博士
学法征文网络安全法
燃烧的远征雷德服务器
共享单车必须要在服务器内进行吗
院前急救协同软件开发商
建立网络安全设置的图片
数据库概论 王小林
桂阳学电脑软件开发学费多少
与网络安全相关的技术