Files
bl/common/utils/tomap.go

23 lines
680 B
Go
Raw Normal View History

package utils
// ToMap converts a slice to a map with the keyFunc determining what the key of a value should be.
// Will override any double values.
func ToMap[T any, K comparable](slice []T, keyFunc func(T) K) map[K]T {
m := make(map[K]T, len(slice))
for _, v := range slice {
m[keyFunc(v)] = v
}
return m
}
// ToSliceMap converts a slice to a map with the keyFunc determining what the key of a value should be.
// Will append to the slice if the key already exists.
func ToSliceMap[T any, K comparable](slice []T, keyFunc func(T) K) map[K][]T {
m := make(map[K][]T, len(slice))
for _, v := range slice {
key := keyFunc(v)
m[key] = append(m[key], v)
}
return m
}