Golang 使用Map实现去重与set的功能操作
作者:潘广宇 Leo 发布时间:2024-02-21 14:54:21
标签:Golang,Map,set
假设现在有一个需求
将以下 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类型, 可以自定义实现。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。
来源:https://blog.csdn.net/panguangyuu/article/details/89645590
0
投稿
猜你喜欢
- 方法一、使用os模块的system方法os.system(cmd),其返回值是shell指令运行后返回的状态码,int类型,0--表示she
- 交代背景作为一名合格的 Python 程序员,在工作中必然会用到二维码相关操作,那如何快速的用 Python 实现呢?别着急,咱们这篇博客就
- 使用 pyInstaller 将 python 程序生成可直接运行的程序,这个exe程序就可以在Windows 或 Ma
- PyCharm就是Python语言开发中一个很受欢迎的IDE,界面类似于visual studio,android studio,集成的功能
- 说到客户端数据存储,可能第一时间想到的是cookies,这是一种网站常见的存储数据的方法。它的最大优点是兼容性好,几乎所有浏览器都具有这个功
- 本章的前面讨论如何使用SQL向一个表中插入数据。但是,如果你需要向一个表中添加许多条记录,使用SQL语句输入数据是很不方便的。幸运的是,My
- 小编今天教你们python怎么导入坐标点,解决你在生活中遇到的小问题。首先下载安装python,打开文本编辑器,将文件保存成 py格式,如果
- 需求查询某个字段的时候需要给一个字段同样的值。这个值你可以写死,也可以从数据库获取1、写死值SELECT mfr_id AS mfrId,
- 本文主要介绍一下在学习可视化过程里遇到的一些情况比如cmap=plt.cm.Blues的映射import matplotlib.pyplot
- 下面通过实例代码给大家介绍python 中pyqt5 树节点点击实现多窗口切换问题,具体代码如下所示:# coding=utf-8impor
- 是因工作需要做的一个批量修改代码的小东西,拿出来与大家分享。 目前可以处理的文件类型:.asp .inc .htm .html
- DataFrame筛选数据与loc用法python中pandas下的DataFrame是一个很不错的数据结构,附带了许多操作、运算、统计等功
- 前言设置mysql最大连接数的方法:首先打开mysql的控制台;然后输入语句【set GLOBAL max_connections=1000
- Oracle数据库提供了几种不同的数据库启动和关闭方式,本文将详细介绍这些启动和关闭方式之间的区别以及它们各自不同的功能。 一、启动和关闭O
- 本文介绍了目前6种比较常用的进度条,让大家都能直观地看到脚本运行最新的进展情况1.普通进度条在代码迭代运行中可以自己进行统计计算,并使用格式
- 在 InnoDB中更加快速的全表扫描 一般来讲,大多数应用查询的时候都会用索引,查找很少的几行数据(主键查找或百行内的
- 在Python 3.5(含)以前,字典是不能保证顺序的,键值对A先插入字典,键值对B后插入字典,但是当你打印字典的Keys列表时,你会发现B
- 一 .概述SQL Server 将某些系统事件和用户定义事件记录到 SQL Server 错误日志和 Microsoft Windows 应
- 前言随着Python 3.8的发布,赋值表达式运算符(也称为海象运算符)也发布了。运算符使值的赋值可以传递到表达式中。这通常会使语句数减少一
- 本文实例讲述了python生成器/yield协程/gevent写简单的图片下载器功能。分享给大家供大家参考,具体如下:1、生成器:'