1. ホーム
  2. go

Golangでマップを順番に反復処理する方法とは?

2023-09-16 22:10:55

質問

以下の私の地図をご覧ください。

var romanNumeralDict map[int]string = map[int]string{
  1000: "M",
  900 : "CM",
  500 : "D",
  400 : "CD",
  100 : "C",
  90  : "XC",
  50  : "L",
  40  : "XL",
  10  : "X",
  9   : "IX",
  5   : "V",
  4   : "IV",
  1   : "I",
}

私はこのマップをキーの大きさの順にループさせたいと思っています。

  for k, v := range romanNumeralDict {
    fmt.Println("k:", k, "v:", v)
  }

しかし、これは以下のように出力されます。

k: 1000 v: M
k: 40 v: XL
k: 5 v: V
k: 4 v: IV
k: 900 v: CM
k: 500 v: D
k: 400 v: CD
k: 100 v: C
k: 90 v: XC
k: 50 v: L
k: 10 v: X
k: 9 v: IX
k: 1 v: I

このマップを次のようにループして、キーの大きさの順にプリントアウトする方法はありますか?

k:1
K:4
K:5
K:9
k:10

etc...

どうもありがとうございました。

どのように解決するのですか?

以下のように、すべてのキーを収集し、ソートして、キーごとにマップを繰り返し処理します。

keys := make([]int, 0)
for k, _ := range romanNumeralDict {
    keys = append(keys, k)
}
sort.Ints(keys)
for _, k := range keys {
    fmt.Println(k, romanNumeralDict[k])
}