广告
返回顶部
首页 > 资讯 > 精选 >go语言中有没有set集合
  • 790
分享到

go语言中有没有set集合

2023-06-15 08:06:45 790人浏览 八月长安
摘要

这篇文章将为大家详细讲解有关Go语言中有没有set集合,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。go语言没有set集合。Set是一个集合,set里的元素不能重复;golang的标准库中没有对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集合”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: go语言中有没有set集合

本文链接: https://www.lsjlt.com/news/279190.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • go语言中有没有set集合
    这篇文章将为大家详细讲解有关go语言中有没有set集合,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。go语言没有set集合。Set是一个集合,set里的元素不能重复;golang的标准库中没有对set的操...
    99+
    2023-06-15
  • go语言有没有gc
    这篇文章主要介绍“go语言有没有gc”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“go语言有没有gc”文章能帮助大家解决问题。go语言有gc。GC是指垃圾回收,是一种自动内存管理的机制;go语言支持...
    99+
    2023-07-04
  • go语言有没有while
    go语言中没有while关键字,不支持while和do-while循环结构。从功能上讲,但凡while语句能做的事情,for语句也可以实现,因此Go语言统一了for语句和while语句。且Go的开发团队有比较严重的洁癖,while并不是一个...
    99+
    2023-05-14
    go语言
  • go语言有没有反射
    这篇文章主要讲解了“go语言有没有反射”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“go语言有没有反射”吧!go语言有反射。Go语言提供了一种机制在运行时更新和检查变量的值、调用变量的方法和...
    99+
    2023-07-04
  • go语言有没有缩进
    go语言有缩进。在go语言中,缩进直接使用gofmt工具格式化即可(gofmt使用tab进行缩进);gofmt工具会以标准样式的缩进和垂直对齐方式对源代码进行格式化,甚至必要情况下注释也会重新格式化。本教程操作环境:windows7系统、G...
    99+
    2023-05-14
    go语言 Golang Go
  • go语言有没有分号
    本篇内容主要讲解“go语言有没有分号”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“go语言有没有分号”吧!go语言中没有分号,go方法是由一条一条语句构成,每个语句后面是不需要分号的;go又称G...
    99+
    2023-07-05
  • go语言中有没有字符类型
    这篇文章将为大家详细讲解有关go语言中有没有字符类型,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Go语言的字符类型有以下两种:一种是 uint8 类型,或者叫 byte 型,代表了 ASC...
    99+
    2023-06-15
  • go语言有没有可调用库
    go语言有可调用库,分别是:1、Go Modules,是Go语言的依赖管理工具;2、net/http,是Go语言标准库中用于处理HTTP请求和响应的模块;3、sqlx,是一个被广泛使用的数据库连接库;4、goroutine,是强大简单的并发...
    99+
    2023-07-17
  • go语言有没有构造函数
    这篇文章主要介绍“go语言有没有构造函数”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“go语言有没有构造函数”文章能帮助大家解决问题。go语言没有构造函数。go语言作为结构化的语言是没有面向对象语言...
    99+
    2023-07-05
  • 有没有公司开始用go语言
    有。使用Go语言的公司有:Google、Facebook、腾讯、七牛云、京东、小米、360、美团、滴滴、新浪、搜狗等。google作为创造了Go语言的公司,有很多基于Go开发的开源项目,比如kubernets,docker。京东云消息推送系...
    99+
    2023-05-14
    go语言 Golang
  • Go语言有没有队列和栈结构
    这篇文章主要介绍“Go语言有没有队列和栈结构”,在日常操作中,相信很多人在Go语言有没有队列和栈结构问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Go语言有没有队列和栈结构”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-07-04
  • Go语言中map集合的具体使用
    目录1-1 定义1-2 map遍历1-3 map集合删除1-4 map是引用类型Go 语言提供了内置类型 map集合,它将一个值与一个键关联起来,可以使用相应的键检索值。 map是一...
    99+
    2023-02-17
    Go语言map集合 Go语言map
  • javascript语言中有没有函数重载
    这篇文章将为大家详细讲解有关javascript语言中有没有函数重载,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 javascript没有函...
    99+
    2022-10-19
  • JavaScript中set集合的方法都有哪些
    JavaScript中set集合的方法都有哪些,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。set方法有:1、add(),用于往集合添加元...
    99+
    2022-10-19
  • python集合set中add与update区别有哪些
    这篇文章主要介绍了python集合set中add与update区别有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。集合set是一个无序不重复元素的集set([&...
    99+
    2023-06-08
  • java中set集合的常用方法有哪些
    这篇文章给大家介绍java中set集合的常用方法有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。因为Set集合也是继承Collection集合所以这里就不讲继承Collection集合的方法  ...
    99+
    2023-06-25
  • Go语言生成二维码,Spring框架实时展示,有没有可能?
    随着移动互联网时代的到来,二维码成为了一种非常流行的信息传递方式。二维码的生成方式也有多种,其中,Go语言是一种非常流行的编程语言,而Spring框架则是一种非常流行的Java框架。那么,是否可以使用Go语言生成二维码,并且使用Sprin...
    99+
    2023-10-26
    二维码 实时 spring
  • 有没有一份GO语言HTTP实时教程能让你立刻上手?
    随着互联网技术的不断发展,现代化的应用程序对于网络通信的需求越来越高。而HTTP(超文本传输协议)是现代化应用程序中最重要的通信协议之一。GO语言是一门快速、高效的编程语言,它在网络编程方面有着得天独厚的优势。因此,GO语言在处理HTTP...
    99+
    2023-10-11
    http 教程 实时
  • go语言中web框架有哪些
    web框架有Gin、Beego、Echo、Iris、Revel、Buffalo、Fiber、Gorilla等等。详细介绍:1、Gin是一个高性能的Go语言Web框架,具有快速路由和中间件支持;2、Beego是一个全功能的Go语言Web框架,...
    99+
    2023-12-11
    go语言 web框架
  • go语言中的框架有哪些
    go语言中的框架有哪些?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。操作环境:windows10系统、GO 1.11.2、thinkpad t480电脑。Go 是一个快速增...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作