This is how to implement a generic function that returns the sorted keys from a map in the Go language.
See the blog post and the updated design draft. In particular the examples about map keys and sort.
package main
import (
"fmt"
"sort"
)
type Ordered interface {
type int, int8, int16, int32, int64,
uint, uint8, uint16, uint32, uint64,
uintptr, float32, float64, string
}
type orderedSlice(type T Ordered) []T
func (s orderedSlice(T)) Len() int {
return len(s)
}
func (s orderedSlice(T)) Less(i, j int) bool {
return s[i] < s[j]
}
func (s orderedSlice(T)) Swap(i, j int) {
s[i], s[j] = s[j], s[i]
}
func OrderedSlice(type T Ordered)(s []T) {
sort.Sort(orderedSlice(T)(s))
}
func SortedKeys(type K Ordered, V interface{})(
m map[K]V) []K {
r := make([]K, 0, len(m))
for k := range m {
r = append(r, k)
}
OrderedSlice(r)
return r
}
func main() {
fmt.Println(
SortedKeys(map[int]int{1: 2, 2: 4}))
// Result: [1 2]
fmt.Println(
SortedKeys(
map[string]int{"foo": 2, "bar": 4}))
// Result: [bar foo]
}
Click to run this on the Go playground.