Go のマップ: 順序の維持と要素へのアクセス
Go では、マップはキーと値のペアを動的かつ効率的に保存する方法を提供します。ただし、配列やスライスとは異なり、マップは本質的にソートされません。これにより、反復処理時に出力が順序どおりに表示されない可能性があります。
次のコード スニペットは、この動作を示しています。
package main import ( "fmt" ) type monthsType struct { no int text string } var months = map[int]string{ 1:"January", 2:"Fabruary", 3:"March", 4:"April", 5:"May", 6:"June", 7:"July", 8:"August", 9:"September", 10:"October", 11:"Novenber", 12:"December", } func main(){ for no, month := range months { fmt.Print(no) fmt.Println("-" + month) } }
このコードを実行すると、マップがキー(数字 1 ~ 12)の順序で印刷されません。代わりに、明らかにランダムな順序で印刷されます。
解決策: マップ内の順序の制御
マップを特定の順序で印刷するには、いくつかのオプションがあります。次のことが考えられます:
1.配列を使用します:
順序が重要な場合は、配列を使用して要素を順番に保存できます。配列は、インデックスを使用して要素に直接アクセスできる順序付けされたデータ構造を提供します。
2.ソートキー:
マップをデータ構造として保持する必要がある場合は、sort.Ints 関数を使用してソートされたキーのリストを取得し、ソートされたキーを反復処理して、マップから対応する値を取得できます。 .
コード例:
package main import ( "fmt" "sort" ) type monthsType struct { no int text string } var months = map[int]string{ 1:"January", 2:"Fabruary", 3:"March", 4:"April", 5:"May", 6:"June", 7:"July", 8:"August", 9:"September", 10:"October", 11:"Novenber", 12:"December", } func main(){ var sortedKeys []int for key := range months { sortedKeys = append(sortedKeys, key) } sort.Ints(sortedKeys) fmt.Println("Printing in order:") for _, key := range sortedKeys { fmt.Printf("%d-%s", key, months[key]) } }
このコードでは、sortedKeys 配列は次のとおりです。マップのキーを昇順で格納するために作成されます。次に、ソートされたキーを反復処理し、マップから対応する値にアクセスします。これにより、次の出力が生成されます:
Printing in order: 1-January2-Fabruary3-March4-April5-May6-June7-July8-August9-September10-October11-Novenber12-December
以上がGo マップを反復するときに順序付けられた出力を保証する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。