golang中set数据结构的使用示例

目录
  • 借助map实现
  • 算法应用

借助map实现

golang中没有set数据结构,一般是通过map实现,因为map的key值是不能重复的

示例

type empty struct {
}

// golang中的set数据类型
func MakeGolangSet(){
    // 首先,空结构体内存消耗为0,其它数据结构如布尔值等均存在内存消耗
    var e empty
    fmt.Printf("empty struct memory is %v\n", unsafe.Sizeof(e))

    fmt.Printf("bool memory is %v\n", unsafe.Sizeof(false))

    set := make(map[string]struct{})
    // ADD
    set["foo"] = e
    // DELETE
    delete(set, "foo")
    // set的规模
    size := len(set)
    fmt.Printf("set size is %v\n", size)
    // 判断是否存在
    set["foo"] = e
    value, exist := set["foo"]
    fmt.Printf("value is %v\n, exist is %v\n", value, exist)
}

算法应用

找两个数组的交集

// 两个数组的交集
func SectionWithTwoArray(num1, num2 []int) []int{
    set := make(map[int]struct{}, 0)
    var res []int
    for _, v := range num1 {
        if _, ok := set[v]; !ok {
            // 去重
            set[v] = struct{}{}
        }
    }
    for _, v := range num2 {
        if _, ok := set[v]; ok {
            res = append(res, v)
            // 将此v删掉,避免结果中出现重复数据
            delete(set, v)
        }
    }
    return res
}

到此这篇关于golang中set数据结构的使用示例的文章就介绍到这了,更多相关golang set数据结构内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Golang 如何判断数组某个元素是否存在(isset)

    如,现在需要判断命令行是否传了参数,即 os.Args[1] 是否存在 如果使用下述的判断: package main import ( "fmt" "os" ) func main() { if os.Args[1] != "" { fmt.Println("aaa") } else { fmt.Println("bbb") } } 会报错: index out of range panic: runti

  • Golang中Set类型的实现方法示例详解

    前言 本篇主要给大家讲述了如何利用Go语言的语法特性实现Set类型的数据结构,分享出来供大家参考学习,话不多说了,来一起看看详细的介绍吧. 需求 对于Set类型的数据结构,其实本质上跟List没什么多大的区别.无非是Set不能含有重复的Item的特性,Set有初始化.Add.Clear.Remove.Contains等操作.接下来看具体的实现方式分析吧. 实现 仍然按照已有的编程经验来联想如何实现基本Set功能,在Java中很容易知道HashSet的底层实现是HashMap,核心的就是用一个常量

  • Golang 使用Map实现去重与set的功能操作

    假设现在有一个需求 将以下 url 保存起来,要求不重复 www.baidu.com www.sina.com.cn www.hao123.com www.baidu.com www.hao123.com 可以利用 map 的 key 唯一性的问题处理 package main var set = map[string]bool { } func main() { ... url := xxx if set[url] { // 表示集合中已经存在 return } set[url] = true

  • golang-redis之sorted set类型操作详解

    1:安装redigo go get github.com/garyburd/redigo/redis 2:引用redigo import ( "github.com/garyburd/redigo/redis" ) 3:连接Redis c, err := redis.Dial("tcp", "192.168.2.225:6379") if err != nil { fmt.Println("connect to redis err&qu

  • golang中set数据结构的使用示例

    目录 借助map实现 算法应用 借助map实现 golang中没有set数据结构,一般是通过map实现,因为map的key值是不能重复的 示例 type empty struct { } // golang中的set数据类型 func MakeGolangSet(){     // 首先,空结构体内存消耗为0,其它数据结构如布尔值等均存在内存消耗     var e empty     fmt.Printf("empty struct memory is %v\n", unsafe.S

  • Golang中的错误处理的示例详解

    目录 1.panic 2.包装错误 3.错误类型判断 4.错误值判断 1.panic 当我们执行panic的时候会结束下面的流程: package main import "fmt" func main() { fmt.Println("hello") panic("stop") fmt.Println("world") } 输出: go run 9.go hellopanic: stop 但是panic也是可以捕获的,我们可

  • 在Golang中使用Redis的方法示例

    周五上班的主要任务是在公司老平台上用redis处理一个队列问题,顺便复习了一下redis操作的基础知识,回来后就想着在自己的博客demo里,用redis来优化一些使用场景,学习一下golang开发下redis的使用. Redis简单介绍 简介 关于Redis的讨论,其实在现在的后台开发中已经是个老生常谈的问题,基本上也是后端开发面试的基本考察点.其中 Redis的背景介绍和细节说明在这里就不赘述.不管怎么介绍,核心在于Redis是一个基于内存的key-value的多数据结构存储,并可以提供持久化

  • golang中struct和[]byte的相互转换示例

    在网络传输过程中,经常会这样处理:socket接收到数据,先获取其消息头,然后再做各种不同的业务处理.在解析消息头的时候的方法有多种多样.其中最为高效解析消息头的方法就是直接把数据头部分强制类型转换为对应的消息头结构体.这种做法在C/C++中非常的常见.而golang其实也是可以这样子做的.类似这样的应用,直接类型转换获取消息对应的解析方法其实效率会相对较高. golang中struct和[]byte的转换方法,其实就是用到了golang中的unsafe包加上类型转换 , 约束:struct中不

  • Golang中的Unicode与字符串示例详解

    背景: 在我们使用Golang进行开发过程中,总是绕不开对字符或字符串的处理,而在Golang语言中,对字符和字符串的处理方式可能和其他语言不太一样,比如Python或Java类的语言,本篇文章分享一些Golang语言下的Unicode和字符串编码. Go语言字符编码 注意: 在Golang语言中的标识符可以包含 " 任何Unicode编码可以标识的字母字符 ". 被转换的整数值应该可以代表一个有效的 Unicode 代码点,否则转换的结果就将会是 "�",即:一个

  • golang中defer的关键特性示例详解

    前言 大家都知道golang的defer关键字,它可以在函数返回前执行一些操作,最常用的就是打开一个资源(例如一个文件.数据库连接等)时就用defer延迟关闭改资源,以免引起内存泄漏.本文主要给大家介绍了关于golang中defer的关键特性,分享出来供大家参考学习,下面话不多说,来一起看看详细的介绍: 一.defer 的作用和执行时机 go 的 defer 语句是用来延迟执行函数的,而且延迟发生在调用函数 return 之后,比如 func a() int { defer b() return

  • golang中strconv.ParseInt函数用法示例

    本文实例讲述了golang中strconv.ParseInt函数用法.分享给大家供大家参考,具体如下: golang strconv.ParseInt 是将字符串转换为数字的函数,功能灰常之强大. 参数1 数字的字符串形式 参数2 数字字符串的进制 比如二进制 八进制 十进制 十六进制 参数3 返回结果的bit大小 也就是int8 int16 int32 int64 func ParseInt(s string, base int, bitSize int) (i int64, err erro

  • Golang中for循环的用法示例详解

    目录 Golang中for循环的用法 for循环 基本语法 注意事项和使用细节 Golang中for循环的用法 for循环 就是让一段代码循环的执行. 基本语法 for循环变量初始化:循环条件:循环变量迭代{ 循环操作(语句) } package main import "fmt" func main(){ for i := 1; i <= 10; i++ { fmt.Println("666",i) } } for循环的四个要素: 1.循环变量初始化 2.循

  • Golang中List的实现方法示例详解

    前言 为了快速回顾Go基本的语法知识,打算用Go中的基本语法以及特性来实现一些常见的数据结构和排序算法,通过分析如何实现一些基本的数据结构,可以很快学习Go的语法特性.记忆更加深刻,掌握更加迅速.这是我认为学习一门新语言入门最好的方式.这也是方便自己以后需要用Go来写东西的一种前期准备,到时候就不用去翻一些教程了.系列博文的第一篇就从如何实现List开始. 需求 大家都知道基本链表得有以下特性:链表的初始化.链表的长度.节点的插入.删除.查找等一些常见的基本操作,最后写好之后,需要测试.关于测试

  • Golang迭代如何在Go中循环数据结构使用详解

    目录 引言 如何在Go中循环字符串 如何在Go中循环map结构 如何在Go中循环Struct 结论 引言 数组是存储类似类型数据的强大数据结构.您可以通过索引识别和访问其中的元素. 在Golang中,您可以通过在0初始化变量i并增加变量直到它达到数组的长度,使用for循环循环数组. 它们的语法如下所示: for i := 0; i < len(arr); i++ { // perform an operation } 例如,让我们循环一个整数数组: package main import ( &qu

随机推荐