generics/maps.go

51 lines
910 B
Go

package generics
// MapPairs returns list of map's key-value pairs.
func MapPairs[K comparable, V any](src map[K]V) Pairs[K, V] {
dst := make([]Pair[K, V], len(src))
idx := 0
for k, v := range src {
dst[idx] = Pair[K, V]{
Key: k,
Value: v,
}
idx++
}
return dst
}
// MapKeys returns list of map's keys.
func MapKeys[K comparable, V any](src map[K]V) []K {
dst := make([]K, len(src))
idx := 0
for k := range src {
dst[idx] = k
idx++
}
return dst
}
// MapValues returns list of map's values.
func MapValues[K comparable, V any](src map[K]V) []V {
dst := make([]V, len(src))
idx := 0
for _, v := range src {
dst[idx] = v
idx++
}
return dst
}
// InvertMap returns map with keys and values swapped.
func InvertMap[K, V comparable](src map[K]V) map[V]K {
if src == nil {
return nil
}
dst := make(map[V]K, len(src))
for k, v := range src {
dst[v] = k
}
return dst
}