Proposal Details
I propose a function to allow a loop over a map in stable order. It takes all keys of the map, sorts them, and loops over the slides, each loop, yields a key-pair.
package moremaps
import (
"cmp"
"iter"
"maps"
"slices"
)
// Sorted returns an iterator over the entries of m in key order.
func Sorted[M ~map[K]V, K cmp.Ordered, V any](m M) iter.Seq2[K, V] {
return func(yield func(K, V) bool) {
for _, k := range slices.Sorted(maps.Keys(m)) {
if !yield(k, m[k]) {
return
}
}
}
}
// SortedFunc returns an iterator over the entries of m in the key order determined by cmp.
func SortedFunc[M ~map[K]V, K comparable, V any](m M, cmp func(x, y K) int) iter.Seq2[K, V] {
return func(yield func(K, V) bool) {
for _, k := range slices.SortedFunc(maps.Keys(m), cmp) {
if !yield(k, m[k]) {
return
}
}
}
}
Proposal Details
I propose a function to allow a loop over a map in stable order. It takes all keys of the map, sorts them, and loops over the slides, each loop, yields a key-pair.