golang:按排序的键顺序遍历任意地图

简而言之:无论地图的类型如何,如何按排序的键顺序遍历地图?


我发现了一些相关的问题,最接近的一个表明不依赖reflect模块就无法完成。这种理解是否正确?


考虑这个 Go 代码,它按照键的排序顺序遍历两个不同类型的映射:


mapOne := map[int]string {

    1: "a",

    2: "b",

    3: "c",

}

keysOne := make([]int, 0, len(mapOne))

for key, _ := range mapOne {

    keysOne = append(keysOne, key)

}

sort.Ints(keysOne)

for _, key := range keysOne {

    value := mapOne[key]

    fmt.Println(key, value)

}


mapTwo := map[string]int {

    "a": 1,

    "b": 2,

    "c": 3,

}

keysTwo := make([]string, 0, len(mapTwo))

for key, _ := range mapTwo {

    keysTwo = append(keysTwo, key)

}

sort.Strings(keysTwo)

for _, key := range keysTwo {

    value := mapTwo[key]

    fmt.Println(key, value)

}

对于两种不同的地图类型,提取键然后对其进行排序的逻辑是重复的。有什么办法可以解决这个逻辑并避免重复?


我在尝试编写接口以提供SortedKeys方法时陷入困境。特别是,的返回类型SortedKeys取决于地图的类型,我不知道如何在 Go 中表达它。



九州编程
浏览 248回答 1
1回答

繁星coding

我认为告诉你需要的人reflect是对的;不过这可能有点矫枉过正。我认为这里的重复是可以接受的。(或者,您可以实现自己的映射,该映射使用某种类型的键接口,但您最终仍需要创建满足每个底层键类型接口的类型)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go