Un mapa es un tipo de colección dinámico que está referenciado por una clave, en lugar de por un índice. Su concepto es muy similar al de un diccionario en otros lenguajes de programación.
Hay dos formas de declarar y crear un mapa en Go:
var variableMapa map[tipoClave]tipoValor variableMapa := make(map[tipoClave]tipoValor
Para añadir o modificar elementos del mapa, basta con indicar la clave y el valor para dicha clave. Si la clave no existe en el mapa, la añade; si ya existe, le cambia el valor.
variableMapa[clave] = valor
Para eliminar un elemento del mapa, se utiliza la función delete()
:
delete(variableMapa, clave)
Para saber si existe un elemento en el mapa, accederemos a dicho elemento, el cual nos devolverá dos valores: la propia clave y un valor boolean
con el valor true
si existe, o false
si no existe:
var1, var2 = variableMapa[clave] _, var = variableMapa[clave]
Nota: El uso del carácter subrayado (_) permite omitir un valor retornado, en este caso el nombre de la propia clave.
Si queremos recorrer uno a uno los elementos utilizaremos un bucle for
alimentado por un rango mediante range
, al cual indicaremos el mapa.
for varClave, varValor := range variableMapa { ... }
Nota: El bloque for
se repetirá por cada uno de los elementos del mapa. El propio bucle obtendrá, de cada elemento, dos variables: la clave y el valor. También podemos hacer uso del carácter subrayado (_) para omitir uno de estos valores.
Ejemplo
El siguiente ejemplo muestra los conceptos vistos anteriormente sobre los mapas en Go.
package main import "fmt" func main() { // Definicion del mapa centros := make(map[string]string) // Adicion de claves y valores centros["MADE"] = "Madrid Este" centros["MADN"] = "Madrid Norte" centros["MOS"] = "Mostoles" centros["POZ"] = "Pozuelo" centros["BCN"] = "Barcelona" // Visualizacion de propiedades y valores fmt.Println("Centros: ", centros) fmt.Println("Total: ", len(centros)) fmt.Println("MOS: ", centros["MOS"]) // Cambio de un elemento por su clave centros["POZ"] = "Pozoblanco" // Eliminacion de un elemento por su clave delete(centros, "MADN") // Visualizacion de propiedades y valores fmt.Println("Centros: ", centros) fmt.Println("Total: ", len(centros)) // Verificar si existe (hay) valor para un elemento clave, existe := centros["MOS"] fmt.Printf("Clave: %s, existe: %v\n", clave, existe) _, existe = centros["ZZZ"] fmt.Printf("existe: %v\n", existe) // Recorrido del mapa for key, value := range centros { fmt.Printf("Key: %s, Value: %s\n", key, value) } }
Nota: Los elemetos del mapa no están ordenados. Cuando se accede al mapa, estos elementos pueden estar en diferentes posiciones.
El resultado del programa será el siguiente:
$ go run maps.go Centros: map[MADE:Madrid Este MADN:Madrid Norte MOS:Mostoles POZ:Pozuelo BCN:Barcelona] Total: 5 MOS: Mostoles Centros: map[MOS:Mostoles POZ:Pozoblanco BCN:Barcelona MADE:Madrid Este] Total: 4 Clave: Mostoles, existe: true existe: false Key: BCN, Value: Barcelona Key: MADE, Value: Madrid Este Key: MOS, Value: Mostoles Key: POZ, Value: Pozoblanco
Enlaces de interés
- Go by Example - Maps: https://gobyexample.com/maps
- Golang Book - Maps: https://www.golang-book.com/books/intro/6#section3
No hay comentarios:
Publicar un comentario