Los mapas en Go son estructuras de datos que permiten almacenar pares de clave-valor. Son similares a los diccionarios en otros lenguajes de programación como Python. Los mapas son muy útiles cuando necesitas asociar valores con claves únicas y acceder a esos valores de manera eficiente.

Conceptos Clave

  1. Definición de un Mapa: Un mapa se define utilizando la sintaxis map[KeyType]ValueType.
  2. Inicialización de un Mapa: Los mapas pueden ser inicializados usando la función make o mediante un literal de mapa.
  3. Acceso a Elementos: Los elementos de un mapa se acceden utilizando la clave entre corchetes.
  4. Añadir y Eliminar Elementos: Puedes añadir elementos asignando un valor a una clave y eliminar elementos usando la función delete.
  5. Iteración sobre un Mapa: Puedes iterar sobre los elementos de un mapa utilizando un bucle for con el rango (range).

Ejemplos Prácticos

Definición e Inicialización

Usando make

package main

import "fmt"

func main() {
    // Definición e inicialización de un mapa usando make
    var myMap map[string]int
    myMap = make(map[string]int)

    // Añadiendo elementos al mapa
    myMap["Alice"] = 25
    myMap["Bob"] = 30

    // Imprimiendo el mapa
    fmt.Println(myMap)
}

Usando un Literal de Mapa

package main

import "fmt"

func main() {
    // Definición e inicialización de un mapa usando un literal de mapa
    myMap := map[string]int{
        "Alice": 25,
        "Bob":   30,
    }

    // Imprimiendo el mapa
    fmt.Println(myMap)
}

Acceso a Elementos

package main

import "fmt"

func main() {
    myMap := map[string]int{
        "Alice": 25,
        "Bob":   30,
    }

    // Accediendo a elementos del mapa
    age := myMap["Alice"]
    fmt.Println("La edad de Alice es:", age)
}

Añadir y Eliminar Elementos

package main

import "fmt"

func main() {
    myMap := map[string]int{
        "Alice": 25,
        "Bob":   30,
    }

    // Añadiendo un nuevo elemento
    myMap["Charlie"] = 35
    fmt.Println("Mapa después de añadir a Charlie:", myMap)

    // Eliminando un elemento
    delete(myMap, "Bob")
    fmt.Println("Mapa después de eliminar a Bob:", myMap)
}

Iteración sobre un Mapa

package main

import "fmt"

func main() {
    myMap := map[string]int{
        "Alice": 25,
        "Bob":   30,
        "Charlie": 35,
    }

    // Iterando sobre el mapa
    for key, value := range myMap {
        fmt.Printf("Clave: %s, Valor: %d\n", key, value)
    }
}

Ejercicios Prácticos

Ejercicio 1: Contador de Palabras

Descripción: Escribe una función que tome una cadena de texto y devuelva un mapa donde las claves sean las palabras y los valores sean el número de veces que cada palabra aparece en el texto.

Solución:

package main

import (
    "fmt"
    "strings"
)

func wordCount(text string) map[string]int {
    words := strings.Fields(text)
    wordMap := make(map[string]int)

    for _, word := range words {
        wordMap[word]++
    }

    return wordMap
}

func main() {
    text := "this is a test this is only a test"
    result := wordCount(text)
    fmt.Println(result)
}

Ejercicio 2: Almacenamiento de Información de Estudiantes

Descripción: Crea un mapa para almacenar la información de estudiantes, donde la clave sea el ID del estudiante y el valor sea una estructura que contenga el nombre y la edad del estudiante. Escribe funciones para añadir, eliminar y buscar estudiantes en el mapa.

Solución:

package main

import "fmt"

type Student struct {
    Name string
    Age  int
}

func addStudent(students map[int]Student, id int, name string, age int) {
    students[id] = Student{Name: name, Age: age}
}

func deleteStudent(students map[int]Student, id int) {
    delete(students, id)
}

func getStudent(students map[int]Student, id int) (Student, bool) {
    student, exists := students[id]
    return student, exists
}

func main() {
    students := make(map[int]Student)

    addStudent(students, 1, "Alice", 20)
    addStudent(students, 2, "Bob", 22)

    fmt.Println("Estudiantes:", students)

    student, exists := getStudent(students, 1)
    if exists {
        fmt.Println("Estudiante con ID 1:", student)
    } else {
        fmt.Println("Estudiante con ID 1 no encontrado")
    }

    deleteStudent(students, 2)
    fmt.Println("Estudiantes después de eliminar a Bob:", students)
}

Conclusión

En esta sección, hemos aprendido sobre los mapas en Go, cómo definirlos, inicializarlos, acceder a sus elementos, añadir y eliminar elementos, y cómo iterar sobre ellos. Los mapas son una herramienta poderosa para asociar claves únicas con valores y acceder a esos valores de manera eficiente. Con los ejercicios prácticos, has tenido la oportunidad de aplicar estos conceptos y reforzar tu comprensión. En el próximo módulo, exploraremos más estructuras de datos avanzadas en Go.

© Copyright 2024. Todos los derechos reservados