// maps.go package golang import ( "cmp" "slices" ) func MapKeys[K cmp.Ordered, V any](m map[K]V, sort bool) (keys []K) { keys = make([]K, len(m)) i := 0 for key := range m { keys[i] = key i++ } if sort { slices.Sort(keys) } return keys } func IterateSortedMap[K cmp.Ordered, V any](m map[K]V, op func(key K, value V) error) (err error) { keys := MapKeys(m, true) for _, key := range keys { if err = op(key, m[key]); err != nil { break } } return } func IterateMap[K cmp.Ordered, V any](m map[K]V, op func(key K, value V) error) (err error) { for key, value := range m { if err = op(key, value); err != nil { break } } return } func MapListGet[K cmp.Ordered, V any](key K, maps ...map[K]V) (value V, mapIndex int) { return MapListGetV(key, maps) } func MapListGetV[K cmp.Ordered, V any](key K, maps []map[K]V) (value V, mapIndex int) { var ok bool mapIndex = -1 for index, m := range maps { if value, ok = m[key]; ok { mapIndex = index break } } return }