文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Golang怎么使用Map实现去重与set的功能

2023-06-14 22:33

关注

这篇文章将为大家详细讲解有关Golang怎么使用Map实现去重与set的功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

golang的优点

golang是一种编译语言,可以将代码编译为机器代码,编译后的二进制文件可以直接部署到目标机器而无需额外的依赖,所以golang的性能优于其他的解释性语言,且可以在golang中使用goroutine来实现并发性,它提供了一个非常优雅的goroutine调度程序系统,可以很容易地生成数百万个goroutine。

假设现在有一个需求

将以下 url 保存起来,要求不重复

www.baidu.comwww.sina.com.cnwww.hao123.comwww.baidu.comwww.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 mainimport (    "fmt")// map[keyType]valueTypefunc 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 mainimport (    "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 mainimport (    "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怎么使用Map实现去重与set的功能”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯