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

[复制链接]
发表于 2023-4-23 12:49:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
原文链接:> 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]
复制代码
代码中有简单说明,不难看出实现过程其实比较简单。

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

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表