Menu
Coddy logo textTech

Mapas de Structs

Parte de la sección Lógica y Flujo del Journey de GO de Coddy. Lección 26 de 68.

Los mapas se vuelven increíblemente potentes cuando almacenas structs como valores. Este patrón te permite organizar datos complejos y estructurados utilizando claves significativas para facilitar la búsqueda y recuperación.

Cuando usas structs como valores de un mapa, esencialmente estás creando una colección donde cada clave apunta a un registro de datos completo. Aquí tienes cómo declarar e inicializar un mapa de este tipo:

type Student struct {
    ID    int
    Grade string
}

students := map[string]Student{
    "Alice": {ID: 101, Grade: "A"},
    "Bob":   {ID: 102, Grade: "B"},
}

Puedes acceder y trabajar con los datos de la estructura a través del mapa como con cualquier otra operación de mapa. Para obtener la información de un estudiante, simplemente usas su nombre como clave:

alice := students["Alice"]
fmt.Println(alice.ID)    // imprime: 101
fmt.Println(alice.Grade) // imprime: A

Este patrón es extremadamente común en aplicaciones de Go para almacenar colecciones de datos relacionados, como perfiles de usuario, catálogos de productos o ajustes de configuración donde se necesita tanto datos estructurados como un acceso rápido basado en claves.

challenge icon

Desafío

Fácil

Crea un sistema de gestión de calificaciones de estudiantes usando mapas con estructuras como valores. Este desafío demuestra cómo organizar datos complejos de estudiantes mediante claves significativas para realizar búsquedas y recuperar información de forma eficiente.

Recibirás dos entradas:

  • Una cadena que representa el número de estudiantes (por ejemplo, "4")
  • Una cadena que contiene los datos de los estudiantes en el formato: "name1:id1:grade1,name2:id2:grade2,name3:id3:grade3" (por ejemplo, "Alice:101:A,Bob:102:B,Charlie:103:C,Diana:104:A")

Tu tarea es:

  1. Definir una estructura Student con los siguientes campos:
    • ID (int): el número de identificación del estudiante
    • Grade (string): la calificación de letra del estudiante
  2. Crear un mapa cuyas claves sean los nombres de los estudiantes (cadenas) y cuyos valores sean estructuras Student
  3. Analizar los datos de los estudiantes de la segunda entrada:
    • Dividir la entrada por comas para obtener las entradas individuales de los estudiantes
    • Para cada entrada, dividir por dos puntos para separar el nombre, el ID y la calificación
    • Convertir la cadena del ID en un entero
    • Crear una estructura Student y añadirla al mapa usando el nombre como clave
  4. Mostrar todos los estudiantes en orden alfabético por nombre con el formato: "[name]: ID [id], Grade [grade]"
  5. Calcular y mostrar las estadísticas de las calificaciones:
    • Contar cuántos estudiantes tienen cada calificación (A, B, C, D, F)
    • Mostrar el recuento de cada calificación que aparezca con el formato: "Grade [grade]: [count] students"
    • Mostrar las calificaciones en orden alfabético (A, B, C, D, F)
  6. Encontrar y mostrar el estudiante con el ID más alto con el formato: "Highest ID: [name] ([id])"
  7. Mostrar el número total de estudiantes: "Total students: [count]"

Usa el paquete strconv para convertir la cadena del ID en un entero y el paquete sort para ordenar alfabéticamente los nombres de los estudiantes. Este desafío demuestra cómo los mapas con valores de tipo estructura proporcionan una forma eficiente de organizar y acceder a colecciones de datos complejas mediante identificadores significativos.

Pruébalo tú mismo

package main

import (
	"fmt"
)

func main() {
	// Leer entrada
	var numStudentsStr string
	var studentData string
	fmt.Scanln(&numStudentsStr)
	fmt.Scanln(&studentData)
	
	// TODO: Definir la estructura Student aquí
	
	// TODO: Crear un mapa para almacenar estudiantes (nombre como clave, estructura Student como valor)
	
	// TODO: Analizar los datos de los estudiantes y poblar el mapa
	
	// TODO: Mostrar todos los estudiantes en orden alfabético por nombre
	
	// TODO: Calcular y mostrar estadísticas de calificaciones
	
	// TODO: Buscar y mostrar al estudiante con el ID más alto
	
	// TODO: Mostrar el número total de estudiantes
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y Flujo

Practica por tu cuenta: Compilador de Go online