11 Trabajando con Maps en Go Part 2

Published May 21, 2024

GoProgrammingMap

11 Trabajando con Maps en Go Part 2

Iterating over map

Para iterar o recorrer un map utilizamos un for-range que es muy similar al de python

shoppingCart := map[string]int{
    "grape": 14,
    "orange":  3,
    "strawberry":   8,
}

for k, v := range shoppingCart {
	fmt.Println(k, v)
}

En este caso estamos separando el key con la variable k y el value en la variable v. Si solo quisiéramos la key, podemos eliminar la v. Pero si solo queremos los values por alguna extraña razón. El for-range debería ir de la siguiente forma.

Un tema muy importante para considerar cuando utilizamos maps, es que el orden del output no se puede asegurar.

En otras palabras. si el primer elemento que se guardó en el map fue grape al momento de tu recorrerlo pueda que la mayoría de las veces no sea el primero en imprimirse en pantalla.

Esta es una de las diferencias entre usar un array o un map. porque un map si garantiza que el primer elemento va a ser siempre el primer elemento.

Si en caso sea necesario obtener los datos en orden, ya debemos de aplicar un algoritmo de ordenamiento.

Get all the keys

A diferencia de Javascript, los maps no tienen una funcion o metodo keys() dentro de su librería standard.

Pero podemos hacer la nuestra, que al final de cuentas el proceso es el mismo. (No es como que javascript haga magia y devuelva los keys en O(1) XDDDD y si hace magia no sería Javascript :satisfied: :satisfied:)

Lo que vamos a hacer es primero declarar nuestro slice (pudo ser un array también, pero debíamos obtener el total de items del map y asignarlo, pero ya evaluaran ustedes si es buena idea o no)

he iteramos sobre nuestro mapa y como mencione anteriormente ya no destructuramos value sino que simplemente key y este se va agregando a nuestro slice.

No esta demás explicar que no tendremos repetidos o duplicados porque los maps no pueden tener 2 keys iguales.

var keys []string
for k := range shoppingCart {
    keys = append(keys, k)
}

fmt.Println(keys)

Sort Keys

Para imprimir de forma ordenada las keys del map utilizamos la función sort.

Para eso debemos importar sort y el código va de la siguiente forma:

import (
	"fmt"
	"sort"
)

func main() {

	shoppingCart := map[string]int{
		"grape":      14,
		"orange":     3,
		"strawberry": 8,
	}

	var keys []string
	for k := range shoppingCart {
		keys = append(keys, k)
	}

	sort.Strings(keys)

	fmt.Println(keys)
}

Elprogramadorgt - Blog © 2024