ホームページ > バックエンド開発 > Golang > Go マップを反復処理するときにキーと値のペアの順序が予測できないのはなぜですか?

Go マップを反復処理するときにキーと値のペアの順序が予測できないのはなぜですか?

Linda Hamilton
リリース: 2024-11-27 09:49:10
オリジナル
845 人が閲覧しました

Why Is the Order of Key-Value Pairs Unpredictable When Iterating Over Go Maps?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート