Iterazione e ordinamento
Gestire l'ordine casuale delle map
Iterazione e ordinamento è una lezione Go Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Go Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Go Academy include 4 lezioni in totale.
Iterare su una map
Utilizzi range per scorrere una map, ottenendo ogni chiave e il relativo valore.
package main
import "fmt"
func main() {
m := map[string]int{"a": 1, "b": 2}
for k, v := range m {
fmt.Println(k, v)
}
}L'ordine è casuale
L'ordine di iterazione delle map non è garantito. Go lo rende deliberatamente casuale. Eseguendo due volte lo stesso ciclo, le chiavi potrebbero essere stampate in ordini diversi.
Perché viene reso casuale
Go rende l'ordine casuale intenzionalmente, così gli sviluppatori non fanno affidamento per errore su un ordine specifico. Il codice che dipende dall'ordine di una map è un problema in attesa di manifestarsi.
Solo le chiavi
Ometta il valore per iterare solo sulle chiavi.
package main
import "fmt"
func main() {
m := map[string]int{"a": 1, "b": 2, "c": 3}
for k := range m {
fmt.Println(k)
}
}Raccogliere le chiavi
Per ottenere un risultato stabile, raccolga prima le chiavi in uno slice.
package main
import "fmt"
func main() {
m := map[string]int{"a": 1, "b": 2, "c": 3}
keys := []string{}
for k := range m {
keys = append(keys, k)
}
fmt.Println("collected", len(keys), "keys")
}Ordinare le chiavi
Ordini le chiavi raccolte, quindi iteri sullo slice. In questo modo si ottiene un output deterministico e ordinato.
package main
import (
"fmt"
"sort"
)
func main() {
m := map[string]int{"c": 3, "a": 1, "b": 2}
keys := []string{}
for k := range m {
keys = append(keys, k)
}
sort.Strings(keys)
for _, k := range keys {
fmt.Println(k, m[k])
}
}Modello per un output ordinato
Il modello raccogli-e-poi-ordina è il modo standard per stampare una map in un ordine prevedibile. Ordini sempre le chiavi quando l'ordine dell'output è importante.
Ordinare chiavi intere
La stessa idea funziona con chiavi numeriche usando sort.Ints.
package main
import (
"fmt"
"sort"
)
func main() {
m := map[int]string{3: "c", 1: "a", 2: "b"}
keys := []int{}
for k := range m {
keys = append(keys, k)
}
sort.Ints(keys)
for _, k := range keys {
fmt.Println(k, m[k])
}
}Modificare durante l'iterazione
È possibile eliminare le chiavi in sicurezza durante un ciclo range. Tuttavia, aggiungere chiavi durante l'iterazione ha comportamento indefinito: le nuove voci potrebbero comparire oppure no.
package main
import "fmt"
func main() {
m := map[string]int{"a": 1, "b": 2, "c": 3}
for k := range m {
if k == "b" {
delete(m, k)
}
}
fmt.Println(len(m))
}Ordinare per valore
Per ordinare in base al valore invece che alla chiave, raccolga le chiavi, quindi le ordini con un confronto che legge i valori dalla map.
package main
import (
"fmt"
"sort"
)
func main() {
m := map[string]int{"a": 3, "b": 1, "c": 2}
keys := []string{}
for k := range m {
keys = append(keys, k)
}
sort.Slice(keys, func(i, j int) bool {
return m[keys[i]] < m[keys[j]]
})
for _, k := range keys {
fmt.Println(k, m[k])
}
}Non fare mai affidamento sull'ordine
Concetto fondamentale: non presuma mai un ordine di iterazione delle map. Se l'ordine è importante, estragga le chiavi in uno slice e le ordini esplicitamente.
Verifica rapida
È necessario stampare le voci di una map in ordine alfabetico per chiave. Qual è l'approccio corretto?
Riepilogo
Iterazione e ordinamento:
- L'ordine di
rangesulle map è intenzionalmente casuale - Raccolga le chiavi, le ordini, quindi iteri per ottenere un output deterministico
- Eliminare durante
rangeè sicuro; aggiungere ha comportamento indefinito
Domande Frequenti
La lezione «Iterazione e ordinamento» è gratuita?
Sì — il testo completo di «Iterazione e ordinamento» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Go Academy, passa a CoddyKit PRO. Il corso Go Academy include 4 lezioni in totale.
Cosa imparerò in «Iterazione e ordinamento»?
Gestire l'ordine casuale delle map Eserciti Go Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Go Academy?
Non è richiesta alcuna esperienza precedente. Go Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.
Quanto tempo richiede la lezione «Iterazione e ordinamento»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Go Academy?
Sì. Ogni lezione Go Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Meccanismi interni delle map
- Verificare l'esistenza
- Map come set
- Iterazione e ordinamento