51 lines
910 B
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
|
|
}
|