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语言操作数据库及其常规操作的示例代码
Apr 21 Golang
Golang 正则匹配效率详解
Apr 25 Golang
go语言中切片与内存复制 memcpy 的实现操作
Apr 27 Golang
golang 实现Location跳转方式
May 02 Golang
golang switch语句的灵活写法介绍
May 06 Golang
Go 在 MongoDB 中常用查询与修改的操作
May 07 Golang
K8s部署发布Golang应用程序的实现方法
Jul 16 Golang
使用GO语言实现Mysql数据库CURD的简单示例
Aug 07 Golang
Go语言 详解net的tcp服务
Apr 14 Golang
golang用type-switch判断interface的实际存储类型
Apr 14 Golang
Golang 结构体数据集合
Apr 22 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
德劲1102收音机的打理维修案例
2021/03/02 无线电
PHPUnit安装及使用示例
2014/10/29 PHP
php实现处理输入转义字符的代码
2015/11/08 PHP
thinkPHP5.0框架API优化后的友好性分析
2017/03/17 PHP
Laravel中log无法写入问题的解决
2017/06/17 PHP
javascript中最常用的继承模式 组合继承
2010/08/12 Javascript
javascript实现动态模态绑定grid过程代码
2014/09/22 Javascript
javascript实现依次输入input自动定焦
2014/12/23 Javascript
个人网站留言页面(前端jQuery编写、后台php读写MySQL)
2016/05/03 Javascript
Node.js环境下编写爬虫爬取维基百科内容的实例分享
2016/06/12 Javascript
BootStrap Table 分页后重新搜索问题的解决办法
2016/08/08 Javascript
浅谈JavaScript的自动垃圾收集机制
2016/12/15 Javascript
浅谈js-FCC算法Friendly Date Ranges(详解)
2017/04/10 Javascript
微信小程序 登录的简单实现
2017/04/19 Javascript
详解Vue中状态管理Vuex
2017/05/11 Javascript
原生javascript实现的全屏滚动功能示例
2017/09/19 Javascript
详解开源的JavaScript插件化框架MinimaJS
2017/10/26 Javascript
微信自定义分享链接信息(标题,图片和内容)实现过程详解
2019/09/04 Javascript
VUEX 数据持久化,刷新后重新获取的例子
2019/11/12 Javascript
微信小程序转化为uni-app项目的方法示例
2020/05/22 Javascript
[46:16]2018DOTA2亚洲邀请赛3月30日 小组赛B组 iG VS VP
2018/03/31 DOTA
python 字符串split的用法分享
2013/03/23 Python
python实现端口转发器的方法
2015/03/13 Python
浅谈Python生成器generator之next和send的运行流程(详解)
2017/05/08 Python
Python3.4实现远程控制电脑开关机
2018/02/22 Python
python 将json数据提取转化为txt的方法
2018/10/26 Python
对python3新增的byte类型详解
2018/12/04 Python
python如何调用java类
2020/07/05 Python
Python 可视化神器Plotly详解
2020/12/26 Python
植村秀美国官网:Shu Uemura美国
2019/03/19 全球购物
会计系中文个人求职信
2013/12/24 职场文书
答谢会策划方案
2014/05/12 职场文书
2014年企业党建工作总结
2014/12/18 职场文书
避暑山庄导游词
2015/02/04 职场文书
pytest进阶教程之fixture函数详解
2021/03/29 Python
如何用python反转图片,视频
2021/04/24 Python