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 Int转string几种方式性能测试
Apr 28 Golang
浅谈Golang 嵌套 interface 的赋值问题
Apr 29 Golang
解决Golang time.Parse和time.Format的时区问题
Apr 29 Golang
golang 实现时间戳和时间的转化
May 07 Golang
试了下Golang实现try catch的方法
Jul 01 Golang
K8s部署发布Golang应用程序的实现方法
Jul 16 Golang
Go语言安装并操作redis的go-redis库
Apr 14 Golang
golang生成并解析JSON
Apr 14 Golang
Golang bufio详细讲解
Apr 21 Golang
Golang 实现 WebSockets 之创建 WebSockets
Apr 24 Golang
Golang解析JSON对象
Apr 30 Golang
Golang gRPC HTTP协议转换示例
Jun 16 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/03/07 PHP
微信支付的开发流程详解
2016/09/13 PHP
PHP输出图像imagegif、imagejpeg与imagepng函数用法分析
2016/11/14 PHP
form表单传递数组数据、php脚本接收的实例
2017/02/09 PHP
ThinkPHP+EasyUI之ComboTree中的会计科目树形菜单实现方法
2017/06/09 PHP
PHP实现的自定义图像居中裁剪函数示例【测试可用】
2017/08/11 PHP
PHP实现普通hash分布式算法简单示例
2018/08/06 PHP
基于JQuery的日期联动实现代码
2011/02/24 Javascript
javascript 实现简单的table排序及table操作练习
2012/12/28 Javascript
JavaScript控制图片加载完成后调用回调函数的方法
2015/03/20 Javascript
jquery对复选框(checkbox)的操作汇总
2016/01/13 Javascript
jQuery模仿阿里云购买服务器选择购买时间长度的代码
2016/04/29 Javascript
jQuery基于正则表达式的表单验证功能示例
2017/01/21 Javascript
Bootstrap警告(Alerts)的实现方法
2017/03/22 Javascript
jQuery插件开发发送短信倒计时功能代码
2017/05/09 jQuery
基于vue.js路由参数的实例讲解——简单易懂
2017/09/07 Javascript
JavaScript调用模式与this关键字绑定的关系
2018/04/21 Javascript
Vue实现一个图片懒加载插件
2019/03/11 Javascript
详解微信小程序缓存--缓存时效性
2019/05/02 Javascript
vue模块移动组件的实现示例
2020/05/20 Javascript
python实现计算资源图标crc值的方法
2014/10/05 Python
python调用java模块SmartXLS和jpype修改excel文件的方法
2015/04/28 Python
用Python将一个列表分割成小列表的实例讲解
2018/07/02 Python
详解Pandas之容易让人混淆的行选择和列选择
2019/07/10 Python
Django 创建后台,配置sqlite3教程
2019/11/18 Python
Jupyter Notebook打开任意文件夹操作
2020/04/14 Python
python上下文管理的使用场景实例讲解
2021/03/03 Python
几款主流好用的富文本编辑器(所见即所得常用编辑器)介绍
2021/03/17 Javascript
html5开发之viewport使用
2013/10/17 HTML / CSS
洛杉矶健身中心女性专用运动服饰品牌:Marika
2018/05/09 全球购物
Notino罗马尼亚网站:购买香水和化妆品
2019/07/20 全球购物
金属材料工程毕业生个人的自我评价
2013/11/28 职场文书
《影子》教学反思
2014/02/21 职场文书
先进个人事迹材料范文
2014/12/30 职场文书
大一新生军训新闻稿
2015/07/17 职场文书
中学团支部工作总结
2015/08/13 职场文书