generics/maps.go

57 lines
1002 B
Go
Raw Permalink Normal View History

2023-11-03 21:18:22 +01:00
package generics
// Pair represents key-value pair
type Pair[K comparable, V any] struct {
Key K
Value V
}
// MapPairs returns list of map's key-value pairs
func MapPairs[K comparable, V any](src map[K]V) []Pair[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
}