一尘不染

按键对Go地图值进行排序

go

在主题函数返回的代码中迭代返回的映射时,键未按顺序显示。

我如何才能使键按顺序排列/对地图进行排序,以使键按顺序排列并且值对应?

这是代码


阅读 318

收藏
2020-07-02

共1个答案

一尘不染

围棋博客:去映射在行动中有极好的说明。

当使用范围循环在地图上进行迭代时,未指定迭代顺序,并且不能保证每次迭代之间都相同。从Go
1开始,运行时间会随机化映射迭代顺序,因为程序员依赖于先前实现的稳定迭代顺序。如果需要稳定的迭代顺序,则必须维护一个指定该顺序的单独的数据结构。

这是我对示例代码的修改后的版本:http :
//play.golang.org/p/dvqcGPYy3-

package main

import (
    "fmt"
    "sort"
)

func main() {
    // To create a map as input
    m := make(map[int]string)
    m[1] = "a"
    m[2] = "c"
    m[0] = "b"

    // To store the keys in slice in sorted order
    var keys []int
    for k := range m {
        keys = append(keys, k)
    }
    sort.Ints(keys)

    // To perform the opertion you want
    for _, k := range keys {
        fmt.Println("Key:", k, "Value:", m[k])
    }
}

输出:

Key: 0 Value: b
Key: 1 Value: a
Key: 2 Value: c
2020-07-02