2023-01-14 13:41:56 -06:00
|
|
|
package slicesext
|
|
|
|
|
|
|
|
|
|
import (
|
2023-08-29 21:04:01 +00:00
|
|
|
"cmp"
|
|
|
|
|
"slices"
|
2023-01-14 13:41:56 -06:00
|
|
|
)
|
|
|
|
|
|
2023-08-29 21:04:01 +00:00
|
|
|
func UniqueJoin[T cmp.Ordered](ss ...[]T) []T {
|
2023-01-14 13:41:56 -06:00
|
|
|
var length int
|
|
|
|
|
for _, s := range ss {
|
|
|
|
|
length += len(s)
|
|
|
|
|
}
|
|
|
|
|
r := make([]T, length)
|
|
|
|
|
var i int
|
|
|
|
|
for _, s := range ss {
|
|
|
|
|
i += copy(r[i:], s)
|
|
|
|
|
}
|
|
|
|
|
slices.Sort(r)
|
|
|
|
|
return slices.Compact(r)
|
|
|
|
|
}
|
2024-06-28 16:50:02 +01:00
|
|
|
|
|
|
|
|
func FirstNonZero[T comparable](values ...T) T {
|
|
|
|
|
var zero T
|
|
|
|
|
for _, v := range values {
|
|
|
|
|
if v != zero {
|
|
|
|
|
return v
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return zero
|
|
|
|
|
}
|