• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    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类型, 可以自定义实现。

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

    您可能感兴趣的文章:
    • Golang中Bit数组的实现方式
    • Golang 如何实现函数的任意类型传参
    • 解决Golang time.Parse和time.Format的时区问题
    • 使用Golang的channel交叉打印两个数组的操作
    • golang goroutine顺序输出方式
    • golang 在windows中设置环境变量的操作
    • 解决golang在import自己的包报错的问题
    • golang 通用Contains方法分享
    上一篇:使用Golang的channel交叉打印两个数组的操作
    下一篇:解决Golang time.Parse和time.Format的时区问题
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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