Golang 使用Map实现去重与set的功能操作

作者:潘广宇 Leo 时间:2024-02-21 14:54:21 

假设现在有一个需求

将以下 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

标签:Golang,Map,set
0
投稿

猜你喜欢

  • 编译asp应用程序成为exe文件

    2008-10-23 14:01:00
  • ASP 常见的连接字符串写法(access2007)

    2011-03-25 10:40:00
  • 一文教会你用Python读取PDF文件

    2021-03-23 00:24:55
  • PHP常用字符串操作函数实例总结(trim、nl2br、addcslashes、uudecode、md5等)

    2023-10-02 13:10:01
  • python删除特定文件的方法

    2023-07-13 23:29:36
  • python函数局部变量用法实例分析

    2023-08-24 17:50:25
  • 如何让vsCode显示中文界面

    2023-05-31 10:22:50
  • ASP数据库编程SQL常用技巧

    2024-01-20 04:53:59
  • mysql使用mysqld_multi部署单机多实例的方法教程

    2024-01-15 12:26:01
  • Python小白垃圾回收机制入门

    2022-05-20 04:38:42
  • Python3标准库之dbm UNIX键-值数据库问题

    2024-01-26 15:56:11
  • python 图片验证码代码分享

    2022-02-21 17:10:27
  • 用js判断页面刷新或关闭的方法(onbeforeunload与onunload事件)

    2024-04-30 08:55:07
  • python的debug实用工具 pdb详解

    2021-04-16 10:31:17
  • python实现在内存中读写str和二进制数据代码

    2022-03-30 04:55:11
  • vscode调试django项目的方法

    2022-03-07 01:02:51
  • python sys模块使用方法介绍

    2021-02-03 09:19:16
  • pytorch之添加BN的实现

    2021-05-04 02:06:16
  • 利用laravel+ajax实现文件上传功能方法示例

    2024-05-03 15:28:02
  • python自动化运维之Telnetlib的具体使用

    2022-09-24 22:11:16
  • asp之家 网络编程 m.aspxhome.com