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