Sobes.tech
Junior

Úgy gondolod, hogy a térképek (map) Go-ban rendezettek lesznek?

sobes.tech MI

Válasz az MI-től

Alapértelmezés szerint a Go-ban a térképen való iterálás nem garantálja az elemek sorrendjét. A sorrend minden bejárásnál változhat. Ez annak köszönhető, hogy a térképek belső adatstruktúrái így vannak megvalósítva, hogy magas teljesítményt érjenek el.

Azonban több módszer is létezik a rendezett bejárás elérésére:

  1. Kulcsok rendezése: Szerezze be a térkép összes kulcsát, rendezze őket, majd a rendezett kulcsokat használva járja be a térképet.

    // Kulcsok rendezésének példája
    package main
    
    import (
    	"fmt"
    	"sort"
    )
    
    func main() {
    	m := map[string]int{
    		"b": 2,
    		"a": 1,
    		"c": 3,
    	}
    
    	keys := make([]string, 0, len(m))
    	for k := range m {
    		keys = append(keys, k)
    	}
    	sort.Strings(keys) // Sztringek rendezése, létezik sort.Ints is.
    
    	for _, k := range keys {
    		fmt.Println(k, m[k])
    	}
    }
    
  2. Olyan adatstruktúrák használata, amelyek garantálják a sorrendet: Ha a sorrend kritikus, más adatstruktúrákat használhat, mint például egy rendezett kulcs-érték pár lista.

Így a Go alapértelmezett térképei nem rendezettek, de további műveletekkel elérhető a sorrend.