2025-03-06 10:57:45 +02:00
|
|
|
package util
|
|
|
|
|
|
2025-03-28 14:50:09 +02:00
|
|
|
import "strings"
|
|
|
|
|
|
2025-03-06 10:57:45 +02:00
|
|
|
// Without return all of x in same order without y
|
|
|
|
|
func Without[T comparable](x []T, y T) []T {
|
|
|
|
|
var ret []T
|
|
|
|
|
for _, v := range x {
|
|
|
|
|
if v != y {
|
|
|
|
|
ret = append(ret, v)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return ret
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Equivalent return true if x and y are equal when sorted
|
|
|
|
|
func Equivalent[T comparable](x, y []T) bool {
|
|
|
|
|
if len(x) != len(y) {
|
|
|
|
|
return false
|
|
|
|
|
}
|
|
|
|
|
|
2026-03-12 21:40:36 +01:00
|
|
|
mp := make(map[T]any)
|
2025-03-06 10:57:45 +02:00
|
|
|
for _, v := range x {
|
|
|
|
|
mp[v] = nil
|
|
|
|
|
}
|
|
|
|
|
for _, v := range y {
|
|
|
|
|
if _, ok := mp[v]; !ok {
|
|
|
|
|
return false
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return true
|
|
|
|
|
}
|
2025-03-28 14:50:09 +02:00
|
|
|
|
|
|
|
|
// SplitTrim split string and trim whitespace
|
|
|
|
|
func SplitTrim(str, sep string) []string {
|
|
|
|
|
if len(str) == 0 {
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
sp := strings.Split(str, sep)
|
|
|
|
|
ret := make([]string, 0, len(sp))
|
|
|
|
|
for _, v := range sp {
|
|
|
|
|
ret = append(ret, strings.TrimSpace(v))
|
|
|
|
|
}
|
|
|
|
|
return ret
|
|
|
|
|
}
|