0Pricing
Go Academy · Lección

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 range en los mapas es aleatorio intencionadamente
  • Recopile las claves, ordénelas y después recórralas para obtener una salida determinista
  • Eliminar durante range es 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

  1. Internals de los mapas
  2. Comprobación de existencia
  3. Mapas como conjuntos
  4. Iteración y orden
← Volver a Go Academy