在 Go 语言中,map 是无序的,因此需要使用其他数据结构来实现有序遍历。以下是几种可用的方法:
- 使用 slice 存储 map 的 key,并对 key 进行排序,然后遍历 slice 获取对应的 value。
m := map[string]string{"a": "apple","b": "banana","c": "cat",}keys := make([]string, len(m))i := 0for k := range m {keys[i] = ki++}sort.Strings(keys)for _, k := range keys {fmt.Println(k, m[k])}
- 使用结构体存储 map 的 key 和 value,并对结构体进行排序,然后遍历结构体获取值。
type KeyValue struct {Key stringValue string}type KeyValueList []KeyValuefunc (kvl KeyValueList) Len() int { return len(kvl) }func (kvl KeyValueList) Less(i, j int) bool { return kvl[i].Key < kvl[j].Key }func (kvl KeyValueList) Swap(i, j int) { kvl[i], kvl[j] = kvl[j], kvl[i] }m := map[string]string{"a": "apple","b": "banana","c": "cat",}kvlist := make(KeyValueList, len(m))i := 0for k, v := range m {kvlist[i] = KeyValue{k, v}i++}sort.Sort(kvlist)for _, kv := range kvlist {fmt.Println(kv.Key, kv.Value)}
- 使用第三方包实现有序的 map,例如 github.com/iancoleman/orderedmap。
import ("fmt""github.com/iancoleman/orderedmap")m := orderedmap.New()m.Set("a", "apple")m.Set("b", "banana")m.Set("c", "cat")for _, key := range m.Keys() {fmt.Println(key, m.Get(key.(string)))}




