Go マップのキーと値の順序付けを理解する
Go では、マップはキーと値のペアの順序付けされていないコレクションです。範囲ループを使用してマップを反復処理する場合、キーと値が返される順序は予測できません。この動作は、順序の保持よりもパフォーマンスを優先するマップの内部実装に起因します。
出力の順序が崩れる理由
この例では、マップの月キーと値のペアが含まれます。キーは月番号を表す整数で、値は対応する月名です。範囲ループを使用してマップを反復処理すると、Go ランタイムは、マップがメモリ内で編成される方法に基づいてキーと値のペアを出力します。ただし、この編成は実行ごとに異なる可能性があり、結果として出力の順序が狂います。
順序の保持
キーと値が必要な場合ペアを特定の順序で印刷するには、2 つのオプションがあります:
1.配列を使用する
配列は、要素の固定順序を維持するデータ構造です。既知のサイズの配列を使用すると、キーと値のペアの順序を明示的に設定できます。コード例は次のとおりです:
var months [12]string months[0] = "January" months[1] = "Fabruary" // ... Populate the rest of the array
2.マップ キーを並べ替える
マップを反復処理する前にマップ キーを並べ替えることもできます。これにより、キーと値のペアが確実に希望の順序で出力されます。コードの例を次に示します。
keys := make([]int, 0, len(months)) for key := range months { keys = append(keys, key) } sort.Ints(keys) for _, key := range keys { fmt.Println(key, "-", months[key]) }
これらのアプローチのいずれかを採用することで、マップ月からの出力の順序を制御できます。
以上がGo マップを反復処理するときにキーと値のペアの順序が予測できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。