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


Posted in Golang onApril 29, 2021

假设现在有一个需求

将以下 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           // 否则如果不存在,设置为true
}

// 完成后,set的所有的key值为不重复的值

在此之前,需要确定 golang 支持的 map 的 key 数量

可以手写暴力写入测试

package main 
import (
 "fmt"
)
 
var test = map[int]int { 
}
 
func main() {
 for i := 0; i < 10000000; i++ {        // 测试对1000万key的支持,完美支持
  fmt.Println(i)
  test[i] = i
 }
}

补充:golang map/set类型

map类型

1. 基础特性

map是一种无序的键值对的集合; 所以可以类似数组/slice一样进行迭代

map的值可以使内建类型, 也可以是struct类型

内部使用hash表实现, map的hash表包含了一个collection of buckets(桶集合)

2. 声明与初始化

package main
import (
    "fmt"
)
// map[keyType]valueType
func initMap() {
    // 通过make方法创建
    dict := make(map[string]int)
    dict["age"] = 18
    // 直接创建
    dict2 := map[string]string{"name":"xiaoming", "phone":"135xxx"}
    dict2["addr"] = "Guangzhou"
    fmt.Printf("%v\n", dict2)
}
func main() {
    initMap()
}

3. 元素访问

package main
import (
    "fmt"
)
type Student struct {
    name string
    grade int
}
func useMap() {
    //使用前应该先初始化, 否则panic报错
    // var map1 map[string]string
    // map1["a"] = "b" // will panic
    map1 := make(map[string]Student)
    map1["s1"] = Student{name:"xiaomo", grade:1}
    fmt.Printf("%v\n", map1)
}
func main() {
    useMap()
}

4. 在函数中传递map

在函数间传递map对象, 是传递引用而不是拷贝; 因此在函数中对map进行了修改, 引用到它的地方也会相应修改

package main
import (
    "fmt"
)
type Student struct {
    name string
    grade int
}
func useMap() {
    map1 := make(map[string]Student)
    map1["s1"] = Student{name:"xiaomo", grade:1}
    // 作为函数参数传递
    printMap(map1)
}
func printMap(m map[string]Student) {
    fmt.Printf("currentMap: %v\n", m)
}
func main() {
    useMap()
}

Set类型

golang没有内置Set类型, 可以自定义实现。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。如有错误或未考虑完全的地方,望不吝赐教。

Golang 相关文章推荐
go 原生http web 服务跨域restful api的写法介绍
Apr 27 Golang
彻底理解golang中什么是nil
Apr 29 Golang
golang import自定义包方式
Apr 29 Golang
浅谈golang package中init方法的多处定义及运行顺序问题
May 06 Golang
解决golang 关于全局变量的坑
May 06 Golang
Golang标准库syscall详解(什么是系统调用)
May 25 Golang
go goroutine 怎样进行错误处理
Jul 16 Golang
golang生成vcf通讯录格式文件详情
Mar 25 Golang
Golang日志包的使用
Apr 20 Golang
Go获取两个时区的时间差
Apr 20 Golang
Golang 实现WebSockets
Apr 24 Golang
Golang入门之计时器
May 04 Golang
使用Golang的channel交叉打印两个数组的操作
Apr 29 #Golang
Go使用协程交替打印字符
Apr 29 #Golang
golang goroutine顺序输出方式
Apr 29 #Golang
golang 在windows中设置环境变量的操作
解决golang在import自己的包报错的问题
golang import自定义包方式
golang 接口嵌套实现复用的操作
Apr 29 #Golang
You might like
php设计模式之单例模式使用示例
2014/01/20 PHP
php实现购物车功能(以大苹果购物网为例)
2017/03/09 PHP
laravel 解决强制跳转 https的问题
2019/10/22 PHP
prototype 源码中文说明之 prototype.js
2006/09/22 Javascript
javascript XMLHttpRequest对象全面剖析
2010/04/24 Javascript
JQuery文本框高亮显示插件代码
2011/04/02 Javascript
DIV+CSS+JS不间断横向滚动实现代码
2013/03/19 Javascript
JQuery实现的图文自动轮播效果插件
2015/06/19 Javascript
jQuery实现动态表单验证时文本框抖动效果完整实例
2015/08/21 Javascript
JS验证邮件地址格式方法小结
2015/12/01 Javascript
原生js实现autocomplete插件
2016/04/14 Javascript
vue过渡和animate.css结合使用详解
2017/06/14 Javascript
Angular2 自定义validators的实现方法
2017/07/05 Javascript
Node.js学习之地址解析模块URL的使用详解
2017/09/28 Javascript
微信小程序实现单列下拉菜单效果
2019/04/25 Javascript
微信小程序Flex布局用法深入浅出分析
2019/04/25 Javascript
原生js实现的金山打字小游戏(实例代码详解)
2020/03/16 Javascript
浅谈实现在线预览PDF的几种解决办法
2020/08/10 Javascript
基于vue hash模式微信分享#号的解决
2020/09/07 Javascript
基于JavaScript实现随机点名器
2021/02/25 Javascript
[01:21]辉夜杯战队访谈宣传片—CDEC
2015/12/25 DOTA
[09:31]2016国际邀请赛中国区预选赛Yao赛后采访 答题送礼
2016/06/27 DOTA
[51:15]完美世界DOTA2联赛PWL S2 PXG vs Magma 第一场 11.21
2020/11/24 DOTA
Python中asyncore异步模块的用法及实现httpclient的实例
2016/06/28 Python
Python实现扩展内置类型的方法分析
2017/10/16 Python
python读取word文档,插入mysql数据库的示例代码
2018/11/07 Python
Python3.6+Django2.0以上 xadmin站点的配置和使用教程图解
2019/06/04 Python
Django组件content-type使用方法详解
2019/07/19 Python
耐克巴西官方网站:Nike巴西
2016/08/14 全球购物
英国皇家邮政海外旗舰店:Royal Mail
2018/02/21 全球购物
初三班主任寄语大全
2014/04/04 职场文书
政治学求职信
2014/06/03 职场文书
2014年监理工作总结范文
2014/11/17 职场文书
农村党支部承诺书
2015/04/30 职场文书
红色经典电影观后感
2015/06/18 职场文书
浅谈Python数学建模之数据导入
2021/06/23 Python