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

打印 上一主题 下一主题

主题 758|帖子 758|积分 2274

原文链接:> https://www.zhoubotong.site/post/95.html
某些业务场景可能需要实现两个或者多个map 的交差并集,一下举个简单的demo, 思路其实并不复杂:
  1. package main
  2. import "fmt"
  3. // 并集
  4. func union(m1, m2 map[string]int) map[string]int {
  5.     result := make(map[string]int) // 思路:先把其中一个map 放到新的对象中,把m2中key不存在于本对象中合并即可
  6.     for k, v := range m1 {
  7.         result[k] = v
  8.     }
  9.     for k, v := range m2 {
  10.         if _, ok := result[k]; !ok {
  11.             result[k] = v
  12.         }
  13.     }
  14.     return result
  15. }
  16. // 交集 两个map中都存在
  17. func intersection(m1, m2 map[string]int) map[string]int {
  18.     result := make(map[string]int) // 思路:优先遍历m1,判断m2中是否存在相同key,存在则存入新对象
  19.     for k, v := range m1 {
  20.         if _, ok := m2[k]; ok {
  21.             result[k] = v
  22.         }
  23.     }
  24.     return result
  25. }
  26. // 差集 包括第一个map中存在的键值对,但是不包括第二个map中的键值对
  27. func difference(m1, m2 map[string]int) map[string]int {
  28.     result := make(map[string]int) // 思路:遍历m1, 判断m2中不存在相同key的则存入新对象,即为差集
  29.     for k, v := range m1 {
  30.         if _, ok := m2[k]; !ok {
  31.             result[k] = v
  32.         }
  33.     }
  34.     return result
  35. }
  36. func main() {
  37.     m1 := make(map[string]int)
  38.     m1["a"] = 11
  39.     m1["b"] = 12
  40.     m1["c"] = 13
  41.     m2 := make(map[string]int)
  42.     m2["a"] = 11
  43.     m2["c"] = 13
  44.     fmt.Println("并集:", union(m1, m2))
  45.     fmt.Println("交集:", intersection(m1, m2))
  46.     fmt.Println("差集:", difference(m1, m2))
  47. }
复制代码
输出:
  1. [Running] go run "/media/uos/G/web/demo/main.go"
  2. 并集: map[a:11 b:12 c:13]
  3. 交集: map[a:11 c:13]
  4. 差集: map[b:12]
复制代码
代码中有简单说明,不难看出实现过程其实比较简单。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

花瓣小跑

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表