自定义交集 并集 差集
package main
import "fmt"
func main() {
aList := []string{"1", "2", "3", "4", "5"}
bList := []string{"4", "5", "6", "7", "8"}
ss := new(baseStruct)
unionList := ss.union(aList, bList)
intersectList := ss.intersect(aList, bList)
diffList1, diffList2 := ss.difference(aList, bList)
fmt.Printf("交集:%v\n", intersectList)
fmt.Printf("并集:%v\n", unionList)
fmt.Printf("差集(属a不属b):%v\n", diffList1)
fmt.Printf("差集(属b不属a):%v\n", diffList2)
}
type baseStruct struct{}
func (s *baseStruct) union(outApiList, LocalDBList []string) []string {
baseMap := make(map[string]int)
unionList := make([]string, 0)
for _, name := range outApiList {
baseMap[name] ++
unionList = append(unionList, name)
}
for _, name := range LocalDBList {
if baseMap[name] == 0 {
unionList = append(unionList, name)
}
}
return unionList
}
func (s *baseStruct) intersect(outApiList, LocalDBList []string) []string {
baseMap := make(map[string]int)
for _, name := range outApiList {
baseMap[name] ++
}
intersectList := make([]string, 0)
for _, name := range LocalDBList {
if baseMap[name] == 1 {
intersectList = append(intersectList, name)
}
}
return intersectList
}
func (s *baseStruct) difference(outApiList, LocalDBList []string) (addList, delList []string) {
baseMap := make(map[string]int)
intersectList := s.intersect(outApiList, LocalDBList)
for _, v := range intersectList {
baseMap[v]++
}
apiNotIntersect := make([]string, 0)
for _, name := range outApiList {
if baseMap[name] == 0 {
apiNotIntersect = append(apiNotIntersect, name)
}
}
localNotIntersect := make([]string, 0)
for _, name := range LocalDBList {
if baseMap[name] == 0 {
localNotIntersect = append(localNotIntersect, name)
}
}
return apiNotIntersect, localNotIntersect
}
set包处理交集 并集 差集
package main
import (
"fmt"
"github.com/fatih/set"
)
func main() {
aList := []int{1, 2, 3, 4, 5}
a := set.New(set.ThreadSafe)
for _, v := range aList {
a.Add(v)
}
bList := []int{4, 5, 6, 7, 8}
b := set.New(set.ThreadSafe)
for _, v := range bList {
b.Add(v)
}
unionSet := set.Union(a, b)
fmt.Printf("并集:%v\n", unionSet)
intersectionSet := set.Intersection(a, b)
fmt.Printf("交集:%v\n", intersectionSet)
diffS1S2 := set.Difference(a, b)
fmt.Printf("差集(属a不属b):%v\n", diffS1S2)
diffS2S1 := set.Difference(b, a)
fmt.Printf("差集(属b不属a):%v\n", diffS2S1)
for _,v := range unionSet.List(){
fmt.Println(v.(int))
}
}