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)
|
|
|
|
}
|
2025-02-23 10:51:59 +01:00
|
|
|
|
|
|
|
func Convert[T, U any](s []T, f func(T) U) []U {
|
|
|
|
// Create a new slice with the same length as the input slice
|
|
|
|
result := make([]U, len(s))
|
|
|
|
|
|
|
|
// Convert each element using the provided function
|
|
|
|
for i, v := range s {
|
|
|
|
result[i] = f(v)
|
|
|
|
}
|
|
|
|
|
|
|
|
return result
|
|
|
|
}
|