/** 该工作目录设置处理关于map集合计算功能 */ package final_common import "fmt" // 并集(保留项) -- 遍历S2 func UnionF(s1, s2 map[string]interface{}) map[string]interface{} { for k, v := range s2 { if _, ok := s1[k]; ok { continue } else { s1[k] = v } } return s1 } // 并集(覆盖项) -- 遍历S2 func UnionL(s1, s2 map[string]interface{}) map[string]interface{} { for k, v := range s2 { s1[k] = v } return s1 } // 差集 -- 遍历S2 func Minus(s1, s2 map[string]interface{}) map[string]interface{} { for k, _ := range s2 { delete(s1, k) } return s1 } // 交集 -- 遍历S1 func Intersect(s1, s2 map[string]interface{}) map[string]interface{} { for k, _ := range s1 { if _, ok := s2[k]; ok { continue } else { delete(s1, k) } } return s1 } // 补集 -- 遍历S2 func Complement(s1, s2 map[string]interface{}) map[string]interface{} { for k, _ := range s2 { if _, ok := s1[k]; ok { delete(s2, k) } else { continue } } return s2 } //========================== 指定map(map) ========================== // 并集(保留项) -- 遍历S2 func UnionFMap(s1, s2 map[string]map[string]string) map[string]map[string]string { for k, v := range s2 { // 第一层 if m, ok := s1[k]; ok { for mk, mv := range v { // 第二层 if _, ok := m[mk]; ok { continue } else { m[mk] = mv } } } else { s1[k] = v } } return s1 } // 并集(覆盖项) -- 遍历S2 func UnionLMap(s1, s2 map[string]map[string]string) map[string]map[string]string { for k, v := range s2 { // 第一层 if m, ok := s1[k]; ok { for mk, mv := range v { // 第二层 if _, ok := m[mk]; ok { continue } else { m[mk] = mv } } } else { s1[k] = v } } return s1 } // 差集 -- 遍历S2 func MinusMap(s1, s2 map[string]map[string]string) map[string]map[string]string { a: for k, v := range s2 { // 第一层 if m, ok := s1[k]; ok { for mk, _ := range v { // 第二层 if _, ok := m[mk]; ok { continue } else { break a } } delete(s1, k) } else { break a } } return s1 } // 交集 -- 遍历S1 func IntersectMap(s1, s2 map[string]map[string]string) map[string]map[string]string { for k, v := range s1 { // 第一层 if m, ok := s2[k]; ok { for mk, _ := range v { // 第二层 if _, ok := m[mk]; ok { continue } else { delete(s1, k) } } } else { delete(s1, k) } } return s1 } // 补集 -- 遍历S2 func ComplementMap(s1, s2 map[string]map[string]string) map[string]map[string]string { a: for k, v := range s2 { // 第一层 if m, ok := s1[k]; ok { delete(s2, k) } else { for mk, _ := range v { // 第二层 if _, ok := m[mk]; ok { continue } else { break a } } delete(s2, k) } } return s2 } //========================== 打印map(map) ========================== // 打印Map集合 func PrintMap(f map[string]map[string]string) { for key, value := range f { fmt.Println("首层:", key) for key, value := range value { fmt.Println("次层:", key, value) } } }