This commit is contained in:
cdle
2023-06-06 20:14:51 +08:00
parent 10f300626a
commit e9a82789d8
4 changed files with 78 additions and 15 deletions
+65 -7
View File
@@ -308,24 +308,82 @@ func IsZeroOrEmpty(str string) bool {
return str == "0" || str == "" || str == "nil"
}
// func Unique(strs ...interface{}) []string {
// m := make(map[string]bool)
// var result []string
// for _, arg := range strs {
// switch arg := arg.(type) {
// case []string:
// for _, v := range arg {
// if _, ok := m[v]; !ok {
// m[v] = true
// result = append(result, v)
// }
// }
// case string:
// if _, ok := m[arg]; !ok {
// m[arg] = true
// result = append(result, arg)
// }
// }
// }
// return result
// }
func Unique(strs ...interface{}) []string {
m := make(map[string]bool)
var result []string
for _, arg := range strs {
var toAppend []string
switch arg := arg.(type) {
case []string:
for _, v := range arg {
if _, ok := m[v]; !ok {
m[v] = true
result = append(result, v)
if !contains(result, v) && !contains(toAppend, v) {
toAppend = append(toAppend, v)
}
}
case []interface{}:
for _, v := range arg {
if !contains(result, v.(string)) && !contains(toAppend, v.(string)) {
toAppend = append(toAppend, v.(string))
}
}
case string:
if _, ok := m[arg]; !ok {
m[arg] = true
result = append(result, arg)
if !contains(result, arg) {
toAppend = append(toAppend, arg)
}
case [][]string:
subResult := Unique(flatten(arg)...)
for _, v := range subResult {
if !contains(result, v) && !contains(toAppend, v) {
toAppend = append(toAppend, v)
}
}
default:
// Unsupported type
continue
}
result = append(result, toAppend...)
}
return result
}
func contains(strs []string, s string) bool {
for _, v := range strs {
if v == s {
return true
}
}
return false
}
func flatten(arr [][]string) []interface{} {
var result []interface{}
for _, subarr := range arr {
var subresult []interface{}
for _, v := range subarr {
subresult = append(subresult, v)
}
result = append(result, subresult)
}
return result
}