Iteración y orden
Gestione el orden aleatorio de los mapas
Iteración y orden es una lección gratuita de Go Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Go Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Go Academy incluye 4 lecciones en total.
Iteración de un mapa
Use range para recorrer un mapa y obtener cada clave y su valor.
package main
import "fmt"
func main() {
m := map[string]int{"a": 1, "b": 2}
for k, v := range m {
fmt.Println(k, v)
}
}El orden es aleatorio
El orden de iteración de los mapas no está garantizado. Go lo aleatoriza deliberadamente. Ejecutar el mismo bucle dos veces puede mostrar las claves en órdenes diferentes.
Por qué se aleatoriza
Go aleatoriza el orden intencionadamente para que los desarrolladores no dependan accidentalmente de un orden específico. El código que depende del orden de un mapa está abocado a causar errores.
Solo las claves
Omita el valor para recorrer únicamente las claves.
package main
import "fmt"
func main() {
m := map[string]int{"a": 1, "b": 2, "c": 3}
for k := range m {
fmt.Println(k)
}
}Recopilación de claves
Para obtener un resultado estable, recopile primero las claves en un 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")
}Ordenación de las claves
Ordene las claves recopiladas y después recorra el slice. Así obtendrá una salida determinista y ordenada.
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])
}
}Patrón de salida ordenada
El patrón de recopilar y después ordenar es la forma habitual de imprimir un mapa en un orden predecible. Ordene siempre las claves cuando el orden de salida sea importante.
Ordenación de claves enteras
La misma idea funciona con claves numéricas 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])
}
}Modificación durante la iteración
Puede eliminar claves de forma segura durante un bucle range. Sin embargo, añadir claves durante la iteración tiene un comportamiento indefinido; las nuevas entradas pueden aparecer o 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))
}Ordenación por valor
Para ordenar por valor en lugar de por clave, recopile las claves y ordénelas con una comparación que lea los valores del mapa.
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])
}
}No dependa nunca del orden
Idea clave: no dé por supuesto el orden de iteración de un mapa. Si el orden importa, extraiga las claves a un slice y ordénelas explícitamente.
Comprobación rápida
Necesita imprimir las entradas de un mapa en orden alfabético por clave. ¿Cuál es el enfoque correcto?
Resumen
Iteración y orden:
- El orden de
rangeen los mapas es aleatorio intencionadamente - Recopile las claves, ordénelas y después recórralas para obtener una salida determinista
- Eliminar durante
rangees seguro; añadir tiene un comportamiento indefinido
Preguntas frecuentes
¿La lección «Iteración y orden» es gratis?
Sí — el texto completo de «Iteración y orden» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Go Academy, actualiza a CoddyKit PRO. El curso de Go Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Iteración y orden»?
Gestione el orden aleatorio de los mapas Practicas Go Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Go Academy?
No se requiere experiencia previa. Go Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Iteración y orden»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Go Academy?
Sí. Cada lección de Go Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Internals de los mapas
- Comprobación de existencia
- Mapas como conjuntos
- Iteración y orden