go 計算map 差集、並集、交集

原文鏈接:> 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]

代碼中有簡單說明,不難看出實現過程其實比較簡單。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章