mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-09-29 22:06:38 +08:00
47 lines
1.1 KiB
Go
47 lines
1.1 KiB
Go
package utils
|
|
|
|
import "strings"
|
|
|
|
// Unique returns a new slice containing only the unique elements of the input slice,
|
|
// preserving their original order.
|
|
func Unique[T comparable](slice []T) []T {
|
|
if slice == nil {
|
|
return nil
|
|
}
|
|
seen := make(map[T]struct{})
|
|
result := make([]T, 0)
|
|
for _, item := range slice {
|
|
if _, ok := seen[item]; ok {
|
|
continue
|
|
}
|
|
seen[item] = struct{}{}
|
|
result = append(result, item)
|
|
}
|
|
return result
|
|
}
|
|
|
|
// UniqueAndCleanStringSlice trims spaces, removes empty elements, and returns only the unique elements
|
|
// of the input string slice. It preserves order and returns nil if the resulting slice is empty.
|
|
func UniqueAndCleanStringSlice(slice []string) []string {
|
|
if slice == nil {
|
|
return nil
|
|
}
|
|
seen := make(map[string]struct{})
|
|
result := make([]string, 0)
|
|
for _, item := range slice {
|
|
trimmed := strings.TrimSpace(item)
|
|
if trimmed == "" {
|
|
continue
|
|
}
|
|
if _, ok := seen[trimmed]; ok {
|
|
continue
|
|
}
|
|
seen[trimmed] = struct{}{}
|
|
result = append(result, trimmed)
|
|
}
|
|
if len(result) == 0 {
|
|
return nil
|
|
}
|
|
return result
|
|
}
|