简而言之:无论地图的类型如何,如何按排序的键顺序遍历地图?
我发现了一些相关的问题,最接近的一个表明不依赖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 中表达它。
繁星coding
相关分类