4

要するに、マップのタイプに関係なく、ソートされたキーの順序でマップをトラバースするにはどうすればよいですか?

関連する質問をいくつか見つけました。最も近いreflect質問は、モジュールに依存しないと実行できないことを示唆しています。この理解は正しいでしょうか?

キーのソート順で異なるタイプの 2 つのマップをトラバースする次の 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)
}

キーを抽出して並べ替えるロジックは、2 つの異なるマップ タイプで複製されます。このロジックを除外して重複を避ける方法はありますか?

メソッドを提供するためのインターフェイスを作成しようとして行き詰まりましたSortedKeys。特に、 の戻り値の型SortedKeysはマップの型に依存していて、それを Go で表現する方法がわかりません。

4

1 に答える 1