diff --git a/slice.go b/slice.go new file mode 100644 index 0000000..6627ebb --- /dev/null +++ b/slice.go @@ -0,0 +1,56 @@ +/* + * string functions + */ +package helper + +// 求差集 +func Diff(slice1, slice2 []string) []string { + m := make(map[string]int) + nn := make([]string, 0) + inter := Intersect(slice1, slice2) + for _, v := range inter { + m[v]++ + } + + for _, value := range slice1 { + times, _ := m[value] + if times == 0 { + nn = append(nn, value) + } + } + return nn +} + +// 求交集 +func Intersect(slice1, slice2 []string) []string { + m := make(map[string]int) + nn := make([]string, 0) + for _, v := range slice1 { + m[v]++ + } + + for _, v := range slice2 { + times, _ := m[v] + if times == 1 { + nn = append(nn, v) + } + } + return nn +} + +// 求并集 +func Union(slice1, slice2 []string) []string { + m := make(map[string]int) + for _, v := range slice1 { + m[v]++ + } + + for _, v := range slice2 { + times, _ := m[v] + if times == 0 { + slice1 = append(slice1, v) + } + } + return slice1 + +} diff --git a/slice_test.go b/slice_test.go new file mode 100644 index 0000000..9217c1b --- /dev/null +++ b/slice_test.go @@ -0,0 +1,27 @@ +package helper + +import ( + "fmt" + "testing" +) + +func Test_Diff(t *testing.T) { + var aa = []string{"43", "33"} + var bb = []string{"2", "33", "1"} + cc := Diff(aa, bb) + fmt.Println(cc) +} + +func Test_Intersect(t *testing.T) { + var aa = []string{"43", "33"} + var bb = []string{"2", "33", "1"} + cc := Intersect(aa, bb) + fmt.Println(cc) +} + +func Test_Union(t *testing.T) { + var aa = []string{"43", "33"} + var bb = []string{"2", "33", "1"} + cc := Union(aa, bb) + fmt.Println(cc) +}