Stable Slice Deduplication

Remove duplicate comparable values while preserving first-seen order, returning a new slice so the caller's data stays untouched.

GoData Integrity

Code

snippet
package main

import "fmt"

func Unique[T comparable](values []T) []T {
	seen := make(map[T]struct{}, len(values))
	result := make([]T, 0, len(values))
	for _, value := range values {
		if _, exists := seen[value]; exists {
			continue
		}
		seen[value] = struct{}{}
		result = append(result, value)
	}
	return result
}

func main() {
	values := []string{"a", "b", "a", "c", "b"}
	unique := Unique(values)
	fmt.Println(unique)
	fmt.Println(values)
}