Sobes.tech
Junior

Pensi che le mappe in Go saranno ordinate?

sobes.tech AI

Risposta dell'AI

Per impostazione predefinita, l'iterazione su una mappa in Go non garantisce l'ordine degli elementi. L'ordine può cambiare ad ogni attraversamento. Ciò è dovuto a come sono implementate le strutture dati interne per la mappa, per raggiungere alte prestazioni.

Tuttavia, ci sono diversi modi per ottenere un attraversamento ordinato:

  1. Ordinare le chiavi: Ottenere tutte le chiavi della mappa, ordinarle e poi attraversare la mappa usando le chiavi ordinate.

    // Esempio di ordinamento delle chiavi
    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) // Ordinare le stringhe, esiste anche sort.Ints, ecc.
    
    	for _, k := range keys {
    		fmt.Println(k, m[k])
    	}
    }
    
  2. Usare strutture dati che garantiscono l'ordine: Se l'ordine è critico, si possono usare altre strutture dati al posto delle mappe o implementare la propria. Ad esempio, una lista di coppie chiave-valore mantenuta in stato ordinato.

In questo modo, le mappe standard in Go non sono ordinate, ma si può ottenere un ordine con operazioni aggiuntive.