Files
hiscaler-gox/setx/set.go
scheibling b4eb50ab55
Some checks failed
Go / build (push) Failing after 7s
Created
2025-04-08 19:16:39 +02:00

71 lines
1.2 KiB
Go

package setx
import (
"strings"
gox "git.cloudyne.io/go/hiscaler-gox"
"git.cloudyne.io/go/hiscaler-gox/inx"
)
// ToSet change slice to unique values
func ToSet[T gox.Number | string | bool | byte | rune](values []T) []T {
if len(values) <= 1 {
return values
}
uniqueValues := make([]T, 0)
kv := make(map[T]struct{}, len(values))
for _, value := range values {
if _, ok := kv[value]; !ok {
kv[value] = struct{}{}
uniqueValues = append(uniqueValues, value)
}
}
return uniqueValues
}
func ToStringSet(values []string, caseSensitive bool) []string {
if len(values) <= 1 {
return values
}
m := make(map[string]string, 0)
for _, value := range values {
value = strings.TrimSpace(value)
if value != "" {
fixedValue := value
if !caseSensitive {
fixedValue = strings.ToLower(fixedValue)
}
if _, ok := m[fixedValue]; !ok {
m[fixedValue] = value
}
}
}
if len(m) == 0 {
return nil
}
sets := make([]string, len(m))
i := 0
for _, v := range m {
sets[i] = v
i++
}
return sets
}
func ToIntSet(values []int) []int {
if len(values) <= 1 {
return values
}
sets := make([]int, 0)
for _, value := range values {
if !inx.IntIn(value, sets...) {
sets = append(sets, value)
}
}
return sets
}