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 28 Golang
golang goroutine顺序输出方式
Apr 29 Golang
解决golang结构体tag编译错误的问题
May 02 Golang
解决Goland 同一个package中函数互相调用的问题
May 06 Golang
关于golang高并发的实现与注意事项说明
May 08 Golang
Golang标准库syscall详解(什么是系统调用)
May 25 Golang
Go遍历struct,map,slice的实现
Jun 13 Golang
Go语言实现Base64、Base58编码与解码
Jul 26 Golang
手把手教你导入Go语言第三方库
Aug 04 Golang
golang连接MySQl使用sqlx库
Apr 14 Golang
Go调用Rust方法及外部函数接口前置
Jun 14 Golang
Go语言怎么使用变长参数函数
Jul 15 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/08/21 PHP
ThinkPHP里用U方法调用js文件实例
2015/06/18 PHP
Zend Framework分页类用法详解
2016/03/22 PHP
PHP安装memcache扩展的步骤讲解
2019/02/14 PHP
apache集成php7.3.5的详细步骤
2019/06/20 PHP
WordPress伪静态规则设置代码实例
2020/12/10 PHP
ExtJS GTGrid 简单用户管理
2009/07/01 Javascript
浏览器脚本兼容 文本框中,回车键触发事件的兼容
2010/06/21 Javascript
EXT窗口Window及对话框MessageBox
2011/01/27 Javascript
使用jquery的ajax需要注意的地方dataType的设置
2013/08/12 Javascript
使用JS获取当前地理位置方法汇总
2014/12/18 Javascript
JavaScript中iframe实现局部刷新的几种方法汇总
2016/01/06 Javascript
Bootstrap选项卡学习笔记分享
2017/02/13 Javascript
原生JavaScript实现精美的淘宝轮播图效果示例【附demo源码下载】
2017/05/27 Javascript
微信小程序网络层封装的实现(promise, 登录锁)
2019/05/08 Javascript
electron-vue利用webpack打包实现多页面的入口文件问题
2019/05/12 Javascript
react中Suspense的使用详解
2019/09/01 Javascript
jquery 时间戳转日期过程详解
2019/10/12 jQuery
layui table表格数据的新增,修改,删除,查询,双击获取行数据方式
2019/11/14 Javascript
es6中class类静态方法,静态属性,实例属性,实例方法的理解与应用分析
2020/02/15 Javascript
nodejs脚本centos开机启动实操方法
2020/03/04 NodeJs
微信小程序点击生成朋友圈分享图(遇到的坑)
2020/06/17 Javascript
Nginx搭建HTTPS服务器和强制使用HTTPS访问的方法
2015/08/16 Python
Python中MySQLdb和torndb模块对MySQL的断连问题处理
2015/11/09 Python
django轻松使用富文本编辑器CKEditor的方法
2017/03/30 Python
python 用 xlwings 库 生成图表的操作方法
2019/12/22 Python
python实现串口通信的示例代码
2020/02/10 Python
基于python实现操作git过程代码解析
2020/07/27 Python
图片上传插件ImgUploadJS:用HTML5 File API 实现截图粘贴上传、拖拽上传
2016/01/20 HTML / CSS
HTML5学习心得总结(推荐)
2016/07/08 HTML / CSS
cosme官方海外旗舰店:日本最大化妆品和美容产品的综合口碑网站
2017/01/18 全球购物
高中校园广播稿
2014/01/11 职场文书
单位刻章介绍信范文
2014/01/11 职场文书
英语感恩演讲稿
2014/01/14 职场文书
升旗仪式演讲稿
2014/05/08 职场文书
开学典礼演讲稿
2014/05/23 职场文书