Sobes.tech
Junior

Crezi că hărțile (map) în Go vor fi ordonate?

sobes.tech AI

Răspuns de la AI

În mod implicit, iterația peste un map în Go nu garantează ordinea elementelor. Ordinea poate varia la fiecare parcurgere. Acest lucru se datorează modului în care sunt implementate structurile de date interne pentru map, pentru a atinge o performanță ridicată.

Cu toate acestea, există mai multe modalități de a obține o parcurgere ordonată:

  1. Sortarea cheilor: Obțineți toate cheile map-ului, sortați-le și apoi parcurgeți map-ul folosind cheile sortate.

    // Exemplu de sortare a cheilor
    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) // Sortează șirurile, există și sort.Ints etc.
    
    	for _, k := range keys {
    		fmt.Println(k, m[k])
    	}
    }
    
  2. Utilizarea structurilor de date care garantează ordinea: Dacă ordinea este critică, se pot folosi alte structuri de date în loc de map-uri sau se poate implementa propria structură. De exemplu, o listă de perechi cheie-valoare păstrată în stare sortată.

Astfel, map-urile standard în Go nu sunt ordonate, dar ordinea poate fi atinsă cu operații suplimentare.