modash/momap/fromslice.go

39 lines
831 B
Go
Raw Permalink Normal View History

package momap
func FromSliceGroups[T any, K comparable](ts []T, fn func(t T) K) map[K][]T {
kvs := make(map[K][]T)
for _, t := range ts {
k := fn(t)
kvs[k] = append(kvs[k], t)
}
return kvs
}
func FromSlice[T any, K comparable, V any](ts []T, fn func(t T) (K, V)) map[K]V {
m, _ := FromSliceWithError(ts, func(t T) (k K, v V, _ error) {
k, v = fn(t)
return k, v, nil
})
return m
}
func FromSliceWithError[T any, K comparable, V any](ts []T, fn func(t T) (K, V, error)) (map[K]V, error) {
kvs := make(map[K]V)
for _, t := range ts {
k, v, err := fn(t)
if err != nil {
return nil, err
}
kvs[k] = v
}
return kvs, nil
}
2025-02-01 22:18:51 +00:00
func IndexSlice[T any, K comparable](ts []T, fn func(t T) K) map[K]T {
m, _ := FromSliceWithError(ts, func(t T) (k K, _ T, _ error) {
k = fn(t)
return k, t, nil
})
return m
}