33 lines
639 B
Go
33 lines
639 B
Go
package util
|
|
|
|
// Contain checks if an element is in a slice.
|
|
func Contain[T comparable](a []T, x T) bool {
|
|
for _, n := range a {
|
|
if x == n {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
// Unique returns a slice with all duplicate elements removed.
|
|
func Unique[T comparable](a []T) []T {
|
|
var result []T
|
|
for _, e := range a {
|
|
if !Contain(result, e) {
|
|
result = append(result, e)
|
|
}
|
|
}
|
|
return result
|
|
}
|
|
|
|
// AntiJOIN returns a slice with all elements in a that are not in b.
|
|
func AntiJoin[T comparable](a []T, b []T) []T {
|
|
var result []T
|
|
for _, e := range a {
|
|
if !Contain(b, e) {
|
|
result = append(result, e)
|
|
}
|
|
}
|
|
return result
|
|
}
|