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 }