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 相关文章推荐
Golang二维切片初始化的实现
Apr 08 Golang
Go语言操作数据库及其常规操作的示例代码
Apr 21 Golang
解决golang在import自己的包报错的问题
Apr 29 Golang
golang 实现Location跳转方式
May 02 Golang
golang elasticsearch Client的使用详解
May 05 Golang
使用golang编写一个并发工作队列
May 08 Golang
Go 中的空白标识符下划线
Mar 25 Golang
Golang 遍历二叉树
Apr 19 Golang
Golang并发工具Singleflight
May 06 Golang
Go语言入门exec的基本使用
May 20 Golang
Go web入门Go pongo2模板引擎
May 20 Golang
Go gorilla/sessions库安装使用
Aug 14 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写的serv-u的web申请账号的程序
2006/10/09 PHP
我的论坛源代码(九)
2006/10/09 PHP
php运行提示:Fatal error Allowed memory size内存不足的解决方法
2014/12/17 PHP
微信开发之php表单微信中自动提交两次问题解决办法
2017/01/08 PHP
laravel通过创建自定义artisan make命令来新建类文件详解
2017/08/17 PHP
Ajax+PHP实现的删除数据功能示例
2019/02/12 PHP
js png图片(有含有透明)在IE6中为什么不透明了
2010/02/07 Javascript
Html中JS脚本执行顺序简单举例说明
2010/06/19 Javascript
在jquery中combobox多选的不兼容问题总结
2013/12/24 Javascript
JavaScript实现控制打开文件另存为对话框的方法
2015/04/17 Javascript
js实现键盘Enter键提交表单的方法
2015/05/27 Javascript
jQuery仿gmail实现fixed布局的方法
2015/05/27 Javascript
借助FileReader实现将文件编码为Base64后通过AJAX上传
2015/12/24 Javascript
D3.js实现散点图和气泡图的方法详解
2016/09/21 Javascript
javascript实现获取指定精度的上传文件的大小简单实例
2016/10/25 Javascript
Angular2 多级注入器详解及实例
2016/10/30 Javascript
js实现登录验证码
2016/12/22 Javascript
微信小程序中setInterval的使用方法
2017/09/29 Javascript
详解使用React全家桶搭建一个后台管理系统
2017/11/04 Javascript
深入理解Vue 单向数据流的原理
2017/11/09 Javascript
vue实现前进刷新后退不刷新效果
2018/01/26 Javascript
jQuery替换节点元素的操作方法
2018/03/18 jQuery
Python 两个列表的差集、并集和交集实现代码
2016/09/21 Python
python 分离文件名和路径以及分离文件名和后缀的方法
2018/10/21 Python
Python 实现还原已撤回的微信消息
2019/06/18 Python
在flask中使用python-dotenv+flask-cli自定义命令(推荐)
2020/01/05 Python
Python实现ATM系统
2020/02/17 Python
python开发实例之python使用Websocket库开发简单聊天工具实例详解(python+Websocket+JS)
2020/03/18 Python
python与c语言的语法有哪些不一样的
2020/09/13 Python
如何在scrapy中捕获并处理各种异常
2020/09/28 Python
下列程序在32位linux或unix中的结果是什么
2015/01/26 面试题
《画家乡》教学反思
2014/04/22 职场文书
学校食堂标语
2014/10/06 职场文书
地球一小时活动总结
2015/02/27 职场文书
基于Python和openCV实现图像的全景拼接详细步骤
2021/10/05 Python
python blinker 信号库
2022/05/04 Python