Els maps són una estructura de dades fonamental en Go que permeten emmagatzemar parelles clau-valor. Són similars als diccionaris en altres llenguatges de programació com Python. En aquest tema, aprendrem com crear, inicialitzar, accedir i manipular maps en Go.

Continguts

Què és un Map?

Un map és una col·lecció no ordenada de parelles clau-valor, on cada clau és única. Els maps són molt útils per a emmagatzemar dades que necessiten ser ràpidament accessibles a través d'una clau.

Creació i Inicialització de Maps

Sintaxi Bàsica

var m map[string]int

Aquesta línia declara un map m amb claus de tipus string i valors de tipus int. No obstant això, aquest map encara no està inicialitzat.

Inicialització amb make

m = make(map[string]int)

També podem inicialitzar i declarar el map en una sola línia:

m := make(map[string]int)

Inicialització amb Valors

Podem inicialitzar un map amb valors predefinits:

m := map[string]int{
    "Alice": 25,
    "Bob":   30,
}

Accés i Modificació de Valors

Accés a Valors

Per accedir a un valor en un map, utilitzem la clau corresponent:

age := m["Alice"]
fmt.Println(age) // Output: 25

Modificació de Valors

Podem modificar el valor associat a una clau existent o afegir una nova parella clau-valor:

m["Alice"] = 26
m["Charlie"] = 35

Eliminar Elements

Per eliminar una parella clau-valor d'un map, utilitzem la funció delete:

delete(m, "Bob")

Iteració sobre Maps

Podem iterar sobre un map utilitzant un bucle for amb el rang (range):

for key, value := range m {
    fmt.Println(key, value)
}

Exemples Pràctics

Exemple 1: Comptar Paraules

package main

import (
    "fmt"
    "strings"
)

func main() {
    text := "hello world hello"
    words := strings.Fields(text)
    
    wordCount := make(map[string]int)
    
    for _, word := range words {
        wordCount[word]++
    }
    
    for word, count := range wordCount {
        fmt.Println(word, count)
    }
}

Exemple 2: Telèfons de Contacte

package main

import "fmt"

func main() {
    contacts := map[string]string{
        "Alice":   "123-456-7890",
        "Bob":     "987-654-3210",
        "Charlie": "555-555-5555",
    }
    
    fmt.Println("Telèfon d'Alice:", contacts["Alice"])
    
    contacts["Alice"] = "111-111-1111"
    fmt.Println("Nou telèfon d'Alice:", contacts["Alice"])
    
    delete(contacts, "Bob")
    
    for name, phone := range contacts {
        fmt.Println(name, phone)
    }
}

Exercicis Pràctics

Exercici 1: Comptar Caràcters

Escriu un programa que compti la freqüència de cada caràcter en una cadena de text.

Solució

package main

import "fmt"

func main() {
    text := "hello world"
    charCount := make(map[rune]int)
    
    for _, char := range text {
        charCount[char]++
    }
    
    for char, count := range charCount {
        fmt.Printf("%c: %d\n", char, count)
    }
}

Exercici 2: Llibreta d'Adreces

Crea un programa que emmagatzemi adreces de correu electrònic associades a noms de persones. Permet afegir, modificar i eliminar entrades, així com cercar una adreça de correu electrònic per nom.

Solució

package main

import "fmt"

func main() {
    addresses := make(map[string]string)
    
    // Afegir entrades
    addresses["Alice"] = "[email protected]"
    addresses["Bob"] = "[email protected]"
    
    // Modificar una entrada
    addresses["Alice"] = "[email protected]"
    
    // Eliminar una entrada
    delete(addresses, "Bob")
    
    // Cercar una adreça
    email, exists := addresses["Alice"]
    if exists {
        fmt.Println("Adreça d'Alice:", email)
    } else {
        fmt.Println("Alice no té una adreça registrada.")
    }
    
    // Iterar sobre totes les entrades
    for name, email := range addresses {
        fmt.Println(name, email)
    }
}

Conclusió

Els maps són una eina poderosa en Go per emmagatzemar i gestionar dades de manera eficient. Hem après com crear, inicialitzar, accedir, modificar, eliminar i iterar sobre maps. A més, hem vist exemples pràctics i exercicis per reforçar els conceptes apresos. Amb aquesta base, estàs preparat per utilitzar maps en els teus projectes de Go.

© Copyright 2024. Tots els drets reservats