Go Programming

Dominando la Iteración de Mapas en Go

Spread the love

Los mapas de Go son una estructura de datos fundamental para almacenar pares clave-valor. Iterar eficientemente a través de estos pares es crucial para muchas aplicaciones. Este artículo proporciona una guía completa para trabajar con mapas, desde la creación hasta el recorrido, haciendo hincapié en las mejores prácticas y los errores comunes.

Tabla de Contenido

Declaración e Inicialización de Mapas

Los mapas de Go se declaran usando la función make() o un literal compuesto. make() permite especificar una capacidad inicial, mejorando el rendimiento para mapas grandes. Los literales compuestos son más concisos para mapas pequeños definidos estáticamente.


package main

import "fmt"

func main() {
  // Usando make()
  myMap := make(map[string]int, 10) // Capacidad inicial de 10
  myMap["apple"] = 1
  myMap["banana"] = 2
  myMap["cherry"] = 3

  // Usando literal compuesto
  anotherMap := map[string]int{
    "apple":  1,
    "banana": 2,
    "cherry": 3,
  }

  fmt.Println("myMap:", myMap)
  fmt.Println("anotherMap:", anotherMap)
}

Iterando sobre Mapas

La forma estándar de iterar sobre un mapa de Go es usando un bucle for...range. Es importante destacar que el orden de iteración no está garantizado y puede variar entre ejecuciones. No confíe en un orden específico para la lógica de su programa.


package main

import "fmt"

func main() {
  myMap := map[string]int{
    "apple":  1,
    "banana": 2,
    "cherry": 3,
  }

  for key, value := range myMap {
    fmt.Printf("Clave: %s, Valor: %dn", key, value)
  }
}

Iterando sobre Claves y Valores Selectivamente

Puede optar por iterar solo sobre las claves o los valores si es necesario, usando el identificador en blanco _ para ignorar el elemento no deseado:


// Iterando solo sobre las claves
for key := range myMap {
    fmt.Println("Clave:", key)
}

// Iterando solo sobre los valores
for _, value := range myMap {
    fmt.Println("Valor:", value)
}

Manteniendo el Orden Durante la Iteración

Si se requiere un orden de iteración específico, debe usar una estructura de datos ordenada. Un enfoque es usar una rebanada de claves, ordenarla e iterar a través de la rebanada, accediendo a los valores correspondientes del mapa:


package main

import (
	"fmt"
	"sort"
)

func main() {
	myMap := map[string]int{
		"apple":  1,
		"banana": 2,
		"cherry": 3,
	}

	keys := make([]string, 0, len(myMap))
	for k := range myMap {
		keys = append(keys, k)
	}
	sort.Strings(keys)

	for _, k := range keys {
		fmt.Printf("Clave: %s, Valor: %dn", k, myMap[k])
	}
}

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *