原文链接:> 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]
复制代码代码中有简单说明,不难看出实现过程其实比较简单。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |