返回顶部
首页 > 资讯 > 后端开发 > GO >Go实现set类型的示例代码
  • 693
分享到

Go实现set类型的示例代码

Goset类型Goset 2023-01-31 12:01:49 693人浏览 安东尼
摘要

目录如何实现set构造一个Set如何实现set Go中是不提供Set类型的,Set是一个集合,其本质就是一个List,只是List里的元素不能重复。 Go提供了map类型,但是我们知

如何实现set

Go中是不提供Set类型的,Set是一个集合,其本质就是一个List,只是List里的元素不能重复。

Go提供了map类型,但是我们知道,map类型的key是不能重复的,因此,我们可以利用这一点,来实现一个set。那value呢?value我们可以用一个常量来代替,比如一个空结构体,实际上空结构体不占任何内存,使用空结构体,能够帮我们节省内存空间,提高性能

下面看看两种结构体的声明方法

type Empty struct { }

func main(){
    empty := new(Empty)
    fmt.Println(unsafe.Sizeof(empty)) //8
}

这种形式的声明会返回一个指向该结构体的指针

而下面这种结构体的声明就是一个随处可用的空缓存

var empty Empty
fmt.Println(unsafe.Sizeof(empty)) //0

构造一个Set

构造一个set,首先定义set的类型

//set类型
type Set struct {
    m map[int]Empty
}

为一个结构体类型,内部一个成员为一个map,这也是主要我们存储值的容器

产生set的工厂

//返回一个set
func SetFactory() *Set{
    return &Set{
        m:map[int]Empty{},
    }
}

这里初始化一个set,内部的map置空

现在给该set类型添加几个方法,分别为

  • Add 添加元素
  • Remove 删除元素
  • Len 获取set长度
  • Clear 清空set
  • Traverse 遍历set
  • SortTraverse 有顺序的遍历Set

由于map自身的特性,在golang中它是由一个hash表做支持的,每个hash函数都会导致不同的遍历顺序,因此,golang要求程序不依赖于具体的hash函数实现,因此,每次遍历map都会有不一样的顺序,然而,对于set来说,可能会要求提供一种有顺序的遍历。因此,这里提供一个有顺序的遍历方法

下面是具体的实现

//添加元素
func (s *Set) Add(val int) {
    s.m[val] = empty
}

//删除元素
func (s *Set) Remove(val int) {
    delete(s.m, val)
}

//获取长度
func (s *Set) Len() int {
    return len(s.m)
}

//清空set
func (s *Set) Clear() {
    s.m = make(map[int]Empty)
}

//遍历set
func (s *Set) Traverse(){
    for v := range s.m {
        fmt.Println(v)
    }
}

//排序输出 
func (s *Set) SortTraverse(){
    vals := make([]int, 0, s.Len())

    for v := range s.m {
        vals = append(vals, v)
    }

    //排序
    sort.Ints(vals)

    for _, v := range vals {
        fmt.Println(v)
    }
}

大家可以挨着挨着的打印测试,我这里就不再赘述了

到此这篇关于Go实现set类型的示例代码的文章就介绍到这了,更多相关Go实现set类型内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: Go实现set类型的示例代码

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

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

猜你喜欢
  • Go实现set类型的示例代码
    目录如何实现set构造一个Set如何实现set Go中是不提供Set类型的,Set是一个集合,其本质就是一个List,只是List里的元素不能重复。 Go提供了map类型,但是我们知...
    99+
    2023-01-31
    Go set类型 Go set
  • C++实现Go的defer功能(示例代码)
    在Go语言中有一个关键字:defer,它的作用就是延迟执行后面的函数,在资源释放方面特别有用,比如下面一段C/C++的示例代码: void test() { FILE* fp ...
    99+
    2024-04-02
  • Go语言实现枚举的示例代码
    在编程领域里,枚举用来表示只包含有限数量的固定值的类型,在开发中一般用于标识错误码或者状态机。拿一个实体对象的状态机来说,它通常与这个对象在数据库里对应记录的标识状态的字段值相对应。...
    99+
    2024-04-02
  • Unity实现车型识别的示例代码
    接口介绍: 该请求用于检测一张车辆图片的具体车型。即对于输入的一张图片(可正常解码,且长宽比适宜),输出图片的车辆品牌及型号。 创建应用: 在产品服务中搜索图像识别,创建应用,获取A...
    99+
    2024-04-02
  • C++cmake实现日志类的示例代码
    Logger.h #pragma once #include <fstream> #include <sstream> #include <iostr...
    99+
    2023-03-09
    C++ cmake实现日志类 C++ cmake日志类 C++ 日志类
  • C++日期类(Date)实现的示例代码
    目录类的定义确定某年某月有多少天构造函数打印日期日期+=天数日期+天数日期-=天数日期-天数前置++后置++后置–前置–>运算符重载==运算符重载>...
    99+
    2024-04-02
  • PHP redis Sorted Set实现字符串去重代码示例
    可以使用 Redis 的 Sorted Set 有序集合来实现字符串去重的功能。 具体步骤如下: 首先将要去重的字符串作为 Sorted Set 的 member 值,可以考虑把相同...
    99+
    2023-05-20
    redis如何去重 php redis redis sorted set
  • go语言实现全排列的示例代码
    目录思路:回溯过程:代码:思路: 首先画出全排列的树形结构,以123为例,一开始排列为空列表,第一个位置有三种可能,分别是1、2、3,画出三个分支;由于第一个位置已经被占用,那么第二...
    99+
    2023-03-07
    go语言全排列
  • python实现布尔型盲注的示例代码
    好久没写python了,就想着写个简单的练练手,写个布尔型盲注自动化脚本,我觉得这个功能写的非常全了,这里是参考sqli-labs里面的盲注漏洞进行的脚本编写。 脚本运行时间:6分半左右 bool_sqlblin...
    99+
    2022-06-02
    python 布尔盲注
  • C++无痛实现日期类的示例代码
    目录日期类的实现构造函数析构函数拷贝构造函数打印函数获取天数函数运算符重载区赋值重载整体代码Date.hDate.cpp日期类的实现 凡是要写类必须要提到六大默认成员(六位大爷):构...
    99+
    2022-11-13
    C++实现日期类 C++日期类
  • Java ClassLoader虚拟类实现代码热替换的示例代码
    目录总结ClassLoader 虚拟类方法实现代码热替换实现改进思考总结 类加载器是负责加载类的对象。类ClassLoader是一个抽象类。给定类的全限定类名,类加载器应尝试查找或生...
    99+
    2024-04-02
  • Go语言基础数据类型实例代码分析
    这篇文章主要讲解了“Go语言基础数据类型实例代码分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Go语言基础数据类型实例代码分析”吧!布尔型布尔型是Go最简单的数据类型,因为布尔型只有两个...
    99+
    2023-07-05
  • C++实现Go的defer功能(示例代码)
    在Go语言中有一个关键字:defer,它的作用就是延迟执行后面的函数,在资源释放方面特别有用,比如下面一段C/C++的示例代码: void test() { FILE* fp...
    99+
    2022-06-07
    c+ GO defer 示例 C++
  • GO语言实现文件上传的示例代码
    目录前言文件上传表单操作服务端操作流程实现小结前言 最近在写一个文件上传的功能,现在来进行整理总结一下go语言如何上传文件的,本文主要分享一下golang实现文件上传的流程和具体代码...
    99+
    2024-04-02
  • go语言实现屏幕截图的示例代码
    目录借助第三方库安装自定义截图 Capture全屏截图 CaptureDisplay获取活动显示器数量 NumActiveDisplays获取指定屏幕显示范围 GetDisplayB...
    99+
    2024-04-02
  • Go语言实现Sm2加解密的示例代码
    在 Go 语言中,可以使用 github.com/tjfoc/gmsm/sm2 包来实现 SM2 加密和解密。 示例代码如下: package main import (     ...
    99+
    2023-03-19
    Go Sm2加解密 Go Sm2
  • GO语言实现TCP服务器的示例代码
    interface/tcp/Handler.go type Handler interface { Handle(ctx context.Context, conn net.C...
    99+
    2023-03-24
    GO编写TCP服务器 GO TCP服务器 GO TCP
  • 用Go+Redis实现分布式锁的示例代码
    目录为什么需要分布式锁 分布式锁需要具备特性 实现 Redis 锁应先掌握哪些知识点 set 命令 Redis.lua 脚本 go-zero 分布式锁 RedisLock 源码分析 ...
    99+
    2024-04-02
  • Tensorflow实现线性回归模型的示例代码
    目录1.线性与非线性回归案例讲解1.数据集2.读取训练数据Income.csv并可视化展示3.利用Tensorflow搭建和训练神经网络模型【线性回归模型的建立】4. 模型预测1.线...
    99+
    2024-04-02
  • Python实现识别花卉种类的示例代码
    目录百度图像识别读取照片文件整理分类照片大家好,我是小五 “无穷小亮的科普日常”经常会发布一些鉴定网络热门生物视频,既科普了生物知识,又满足观众们的猎奇心理。...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作