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 interface判断为空nil的实现代码
Apr 24 Golang
golang goroutine顺序输出方式
Apr 29 Golang
golang DNS服务器的简单实现操作
Apr 30 Golang
解决golang结构体tag编译错误的问题
May 02 Golang
go设置多个GOPATH的方式
May 05 Golang
go语言中GOPATH GOROOT的作用和设置方式
May 05 Golang
golang中字符串MD5生成方式总结
Jul 04 Golang
Golang数据类型和相互转换
Apr 12 Golang
Golang流模式之grpc的四种数据流
Apr 13 Golang
Golang ort 中的sortInts 方法
Apr 24 Golang
Go微服务项目配置文件的定义和读取示例详解
Jun 21 Golang
Go语言编译原理之源码调试
Aug 05 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
thinkphp autoload 命名空间自定义 namespace
2015/07/17 PHP
php将print_r处理后的数据还原为原始数组的解决方法
2016/11/02 PHP
PHP让数组中有相同值的组成新的数组实例
2017/12/31 PHP
枚举的实现求得1-1000所有出现1的数字并计算出现1的个数
2013/09/10 Javascript
在Ubuntu系统上安装Ghost博客平台的教程
2015/06/17 Javascript
jQuery数据检索中根据关键字快速定位GridView指定行的实现方法
2016/06/08 Javascript
JS封装的自动创建表格的实现代码
2016/06/15 Javascript
Javascript点击其他任意地方隐藏关闭DIV实例
2016/06/21 Javascript
Jquery uploadify 多余的Get请求(404错误)的解决方法
2017/01/26 Javascript
prototype.js简单实现ajax功能示例
2017/10/18 Javascript
vue cli使用绝对路径引用图片问题的解决
2017/12/06 Javascript
Jquery实现无缝向上循环滚动列表的特效
2019/02/13 jQuery
通过vue手动封装on、emit、off的代码详解
2019/05/29 Javascript
vue element 中的table动态渲染实现(动态表头)
2019/11/21 Javascript
js DOM的事件常见操作实例详解
2019/12/16 Javascript
js实现省级联动(数据结构优化)
2020/07/17 Javascript
[01:38]DOTA2第二届亚洲邀请赛中国区预选赛出线战队晋级之路
2017/01/17 DOTA
学习python的几条建议分享
2013/02/10 Python
详解Django中Request对象的相关用法
2015/07/17 Python
详解Python3 pickle模块用法
2019/09/16 Python
keras 解决加载lstm+crf模型出错的问题
2020/06/10 Python
Python读取Excel一列并计算所有对象出现次数的方法
2020/09/04 Python
详解html5 canvas常用api总结(二)--绘图API
2016/12/14 HTML / CSS
在Ajax应用中信息是如何在浏览器和服务器之间传递的
2016/05/31 面试题
应聘护理专业毕业自荐书范文
2014/02/12 职场文书
《走一步再走一步》教学反思
2014/02/15 职场文书
党员作风建设整改方案
2014/10/27 职场文书
2014年大学生村官工作总结
2014/11/19 职场文书
2014年营销工作总结
2014/11/22 职场文书
八年级英语教学计划
2015/01/23 职场文书
研究生论文答辩开场白
2015/05/27 职场文书
毕业晚宴祝酒词
2015/08/11 职场文书
党员公开承诺书(2016最新版)
2016/03/24 职场文书
会计专业自荐信范文
2019/05/22 职场文书
python爬取新闻门户网站的示例
2021/04/25 Python
关于PHP数组迭代器的使用方法实例
2021/11/17 PHP