疯狂编程网

  • 首页
  • 后端
    • GOLANG
    • PHP
  • 前端
  • 客户端
  • 服务器
  • AIGC
  • 开发工具
  • 代码人生
  • 关于本站
    • 联系我们
    • 免责声明
  1. 首页
  2. 后端
  3. GOLANG
  4. 正文

go 计算map 差集、并集、交集

2023年5月10日 361点热度 0人点赞 0条评论

原文链接:> https://www.zhoubotong.site/post/95.html

某些业务场景可能需要实现两个或者多个map 的交差并集,一下举个简单的demo, 思路其实并不复杂:

package main

import "fmt"

// 并集
func union(m1, m2 map[string]int) map[string]int {
    result := make(map[string]int) // 思路:先把其中一个map 放到新的对象中,把m2中key不存在于本对象中合并即可
    for k, v := range m1 {
        result[k] = v
    }
    for k, v := range m2 {
        if _, ok := result[k]; !ok {
            result[k] = v
        }
    }
    return result
}

// 交集 两个map中都存在
func intersection(m1, m2 map[string]int) map[string]int {
    result := make(map[string]int) // 思路:优先遍历m1,判断m2中是否存在相同key,存在则存入新对象
    for k, v := range m1 {
        if _, ok := m2[k]; ok {
            result[k] = v
        }
    }
    return result
}

// 差集 包括第一个map中存在的键值对,但是不包括第二个map中的键值对
func difference(m1, m2 map[string]int) map[string]int {
    result := make(map[string]int) // 思路:遍历m1, 判断m2中不存在相同key的则存入新对象,即为差集
    for k, v := range m1 {
        if _, ok := m2[k]; !ok {
            result[k] = v
        }
    }
    return result
}
func main() {
    m1 := make(map[string]int)
    m1["a"] = 11
    m1["b"] = 12
    m1["c"] = 13
    m2 := make(map[string]int)
    m2["a"] = 11
    m2["c"] = 13
    fmt.Println("并集:", union(m1, m2))
    fmt.Println("交集:", intersection(m1, m2))
    fmt.Println("差集:", difference(m1, m2))
}

输出:

[Running] go run "/media/uos/G/web/demo/main.go"
并集: map[a:11 b:12 c:13]
交集: map[a:11 c:13]
差集: map[b:12]

代码中有简单说明,不难看出实现过程其实比较简单。

无论从事什么行业,只要做好两件事就够了,一个是你的专业、一个是你的人品,专业决定了你的存在,人品决定了你的人脉,剩下的就是坚持,用善良專業和真诚赢取更多的信任。
标签: golang
最后更新:2023年5月10日

大明

靠写代码养家的开发者。

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

COPYRIGHT © 2023 疯狂编程网. ALL RIGHTS RESERVED.

京ICP备2022013580号-1