14 Trabajando con Maps en Go Part 2
Published May 21, 2024
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)
}