package datascience

// GroupBy agrupa los elementos de un slice según la clave devuelta por keyFn.
func GroupBy[T any, K comparable](xs []T, keyFn func(T) K) map[K][]T {
	groups := make(map[K][]T)
	for _, x := range xs {
		k := keyFn(x)
		groups[k] = append(groups[k], x)
	}
	return groups
}
