Goでは、マップ上での反復は、 for
ループ内のrange
キーワードを使用して行われます。これにより、マップ内の各エントリのキーと値の両方にアクセスできます。マップ上で反復するための基本的な構文は、次のように見えます。
<code class="go">myMap := map[string]int{"one": 1, "two": 2, "three": 3} for key, value := range myMap { fmt.Printf("Key: %s, Value: %d\n", key, value) }</code>
このコードは、マップ内の各キー値ペアを印刷します。 Mapが本質的に順序付けられていないデータ構造であるため、Goのマップ上の反復順序は、反復するたびに同じであることを保証しません。
for
ループ内のGO内のマップでrange
を使用するための構文は次のとおりです。
<code class="go">for key, value := range mapVariable { // Code to process each key-value pair }</code>
ここで、 mapVariable
はマップであり、 key
現在のエントリのキーを保持し、 value
関連する値を保持します。キーまたは値のいずれかにのみ興味がある場合は、キーまたは値のいずれかを無視することを選択できます。たとえば、キーを繰り返すだけです。
<code class="go">for key := range mapVariable { // Code to process each key }</code>
または値を繰り返すだけです。
<code class="go">for _, value := range mapVariable { // Code to process each value }</code>
マップのエントリを直接変更すると、特にエントリを削除しようとしている場合は、予期しない動作やパニックにつながる可能性があるため、マップを反復しながらマップを変更すると難しい場合があります。ただし、これらのプラクティスに従うことで、マップを安全に変更しながら、マップを安全に変更できます。
エントリの削除:別のスライスを使用して削除するキーを収集し、メインイテレーションループ後にスライスを削除するキーを収集することにより、反復中にマップからエントリを安全に削除できます。
<code class="go">myMap := map[string]int{"one": 1, "two": 2, "three": 3} keysToDelete := []string{} for key, value := range myMap { if value == 2 { keysToDelete = append(keysToDelete, key) } } for _, key := range keysToDelete { delete(myMap, key) }</code>
値の変更:問題なく、イテレーション中にマップエントリの値を直接変更できます。
<code class="go">for key, value := range myMap { myMap[key] = value * 2 // Doubling the value }</code>
GOで大規模なマップを扱うとき、留意すべきいくつかのパフォーマンス上の考慮事項があります。
sync.Map
、同時アクセスに使用できますが、独自のパフォーマンストレードオフセットが付属しています。大規模なマップを使用するときにパフォーマンスを最適化するには、次のことを検討してください。
sync.Map
使用します。以上がGoのマップをどのように反復しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。