mirror of
https://github.com/Jinnrry/PMail.git
synced 2025-11-01 12:22:38 +08:00
95 lines
1.5 KiB
Go
95 lines
1.5 KiB
Go
package array
|
|
|
|
import (
|
|
"github.com/spf13/cast"
|
|
"strings"
|
|
)
|
|
|
|
func Join[T any](arg []T, str string) string {
|
|
var ret strings.Builder
|
|
for i, t := range arg {
|
|
if i == 0 {
|
|
ret.WriteString(cast.ToString(t))
|
|
} else {
|
|
ret.WriteString(str)
|
|
ret.WriteString(cast.ToString(t))
|
|
}
|
|
}
|
|
return ret.String()
|
|
}
|
|
|
|
// Unique 数组去重
|
|
func Unique[T comparable](slice []T) []T {
|
|
mp := map[T]bool{}
|
|
for _, v := range slice {
|
|
mp[v] = true
|
|
}
|
|
ret := []T{}
|
|
for t, _ := range mp {
|
|
ret = append(ret, t)
|
|
}
|
|
return ret
|
|
}
|
|
|
|
// Merge 求并集
|
|
func Merge[T any](slice1, slice2 []T) []T {
|
|
s1Len := len(slice1)
|
|
|
|
slice3 := make([]T, s1Len+len(slice2))
|
|
for i, t := range slice1 {
|
|
slice3[i] = t
|
|
}
|
|
|
|
for i, t := range slice2 {
|
|
slice3[s1Len+i] = t
|
|
}
|
|
|
|
return slice3
|
|
}
|
|
|
|
// Intersect 求交集
|
|
func Intersect[T comparable](slice1, slice2 []T) []T {
|
|
m := make(map[T]bool)
|
|
nn := make([]T, 0)
|
|
for _, v := range slice1 {
|
|
m[v] = true
|
|
}
|
|
|
|
for _, v := range slice2 {
|
|
exist, _ := m[v]
|
|
if exist {
|
|
nn = append(nn, v)
|
|
}
|
|
}
|
|
return nn
|
|
}
|
|
|
|
// Difference 求差集 slice1-并集
|
|
func Difference[T comparable](slice1, slice2 []T) []T {
|
|
m := make(map[T]bool)
|
|
nn := make([]T, 0)
|
|
inter := Intersect(slice1, slice2)
|
|
for _, v := range inter {
|
|
m[v] = true
|
|
}
|
|
|
|
for _, value := range slice1 {
|
|
exist, _ := m[value]
|
|
if !exist {
|
|
nn = append(nn, value)
|
|
}
|
|
}
|
|
return nn
|
|
}
|
|
|
|
// InArray 判断元素是否在数组中
|
|
func InArray[T comparable](needle T, haystack []T) bool {
|
|
for _, t := range haystack {
|
|
if needle == t {
|
|
return true
|
|
}
|
|
}
|
|
|
|
return false
|
|
}
|