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

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

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-27 09:49:10852ブラウズ

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。