🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
> # 无序输出 - 每次遍历map时,不是从固定的0号桶开始,而是从一个随机值序号的bucket开始。这种随机性确保了每次遍历的结果都是不同的,从而使得map看起来是无序的。 - 扩容导致key的搬迁:当map进行扩容时,原有的key可能会被搬迁到新的位置,这进一步加剧了map的无序性。 > # 实现有序输出 ``` package main import ( "fmt" "sort" ) func main() { m := map[string]int{ "a": 3, "b": 1, "c": 2, } // 1. 存储键值对到切片 type kv struct { Key string Value int } var kvs []kv for k, v := range m { kvs = append(kvs, kv{k, v}) } // 2. 按值排序切片 sort.Slice(kvs, func(i, j int) bool { return kvs[i].Value < kvs[j].Value }) // 3. 按排序顺序遍历切片 for _, kv := range kvs { fmt.Println(kv.Key, kv.Value) } } ```