3

Goブログでは、地図を順番に印刷する方法です。

http://blog.golang.org/go-maps-in-action

      import "sort"

      var m map[int]string
      var keys []int
      for k := range m {
          keys = append(keys, k)
      }
      sort.Ints(keys)
      for _, k := range keys {
          fmt.Println("Key:", k, "Value:", m[k])
      }

しかし、次のような文字列キーがある場合はどうなりますかvar m map[string]string

文字列を順番に出力する方法がわかりません(ソートされていない、マップコンテナで文字列が作成された順序で)

例は私の遊び場にありますhttp://play.golang.org/p/Tt_CyATTA3 ご覧のとおり、ごちゃごちゃした文字列を出力し続けるため、整数値をにマップしようとしましmap[string]stringたが、各要素をマップする方法がわかりませんでしたのmap[string]string

http://play.golang.org/p/WsluZ3o4qd

4

1 に答える 1

3

さて、ブログでは、反復順序がランダム化されていると述べています。

「...範囲ループでマップを反復する場合、反復順序は指定されておらず、反復ごとに同じであるとは限りません」

解決策は簡単です。必要に応じてキーを並べた別のスライスがあります。

「...安定した反復順序が必要な場合は、その順序を指定する別のデータ構造を維持する必要があります。」

したがって、期待どおりに動作するには、正しい順序で追加のスライスを作成し、結果を反復処理してその順序で出力します。

order := []string{"i", "we", "he", ....}

func String(result map[string]string) string { 
   for _, v := range order { 
      if present in result print it, 
   }
   ... print all the Non-Defined at the end 
  return stringValue
}

ここで実行されていることを確認してください: http://play.golang.org/p/GsDLXjJ0-E

于 2013-10-01T23:58:09.713 に答える