|
|
@ -3,6 +3,11 @@ |
|
|
|
*/ |
|
|
|
package helper |
|
|
|
|
|
|
|
import ( |
|
|
|
"errors" |
|
|
|
"fmt" |
|
|
|
) |
|
|
|
|
|
|
|
// 求差集
|
|
|
|
func Diff(slice1, slice2 []string) []string { |
|
|
|
m := make(map[string]int) |
|
|
@ -52,5 +57,32 @@ func Union(slice1, slice2 []string) []string { |
|
|
|
} |
|
|
|
} |
|
|
|
return slice1 |
|
|
|
} |
|
|
|
|
|
|
|
func Unique(originals interface{}) (interface{}, error) { |
|
|
|
temp := map[string]struct{}{} |
|
|
|
switch slice := originals.(type) { |
|
|
|
case []string: |
|
|
|
result := make([]string, 0, len(originals.([]string))) |
|
|
|
for _, item := range slice { |
|
|
|
key := fmt.Sprint(item) |
|
|
|
if _, ok := temp[key]; !ok { |
|
|
|
temp[key] = struct{}{} |
|
|
|
result = append(result, item) |
|
|
|
} |
|
|
|
} |
|
|
|
return result, nil |
|
|
|
case []int64: |
|
|
|
result := make([]int64, 0, len(originals.([]int64))) |
|
|
|
for _, item := range slice { |
|
|
|
key := fmt.Sprint(item) |
|
|
|
if _, ok := temp[key]; !ok { |
|
|
|
temp[key] = struct{}{} |
|
|
|
result = append(result, item) |
|
|
|
} |
|
|
|
} |
|
|
|
return result, nil |
|
|
|
default: |
|
|
|
return nil, errors.New(fmt.Sprintf("Unknown type: %T", slice)) |
|
|
|
} |
|
|
|
} |