Menu
Coddy logo textTech

Mapas de Structs

Parte da seção Lógica & Fluxo do Journey de GO da Coddy. Lição 26 de 68.

Mapas tornam-se incrivelmente poderosos quando você armazena structs como valores. Este padrão permite que você organize dados complexos e estruturados usando chaves significativas para fácil busca e recuperação.

Quando você usa structs como valores de um mapa, você está essencialmente criando uma coleção onde cada chave aponta para um registro de dados completo. Veja como você declara e inicializa tal mapa:

type Student struct {
    ID    int
    Grade string
}

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

Você pode acessar e trabalhar com os dados da struct por meio do mapa, assim como em qualquer outra operação de mapa. Para obter as informações de um aluno, basta usar o nome dele como chave:

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

Este padrão é extremamente comum em aplicações Go para armazenar coleções de dados relacionados, como perfis de usuário, catálogos de produtos ou configurações, onde você precisa tanto de dados estruturados quanto de acesso rápido baseado em chaves.

challenge icon

Desafio

Fácil

Crie um sistema de gerenciamento de notas de alunos usando mapas com structs como valores. Este desafio demonstra como organizar dados complexos de alunos usando chaves significativas para uma consulta e recuperação eficientes.

Você receberá duas entradas:

  • Uma string que representa o número de alunos (por exemplo, "4")
  • Uma string contendo os dados dos alunos no formato: "name1:id1:grade1,name2:id2:grade2,name3:id3:grade3" (por exemplo, "Alice:101:A,Bob:102:B,Charlie:103:C,Diana:104:A")

Sua tarefa é:

  1. Definir uma struct Student com os seguintes campos:
    • ID (int) - o número de identificação do aluno
    • Grade (string) - a nota do aluno representada por uma letra
  2. Criar um mapa em que as chaves sejam os nomes dos alunos (strings) e os valores sejam structs Student
  3. Analisar os dados dos alunos a partir da segunda entrada:
    • Dividir a entrada por vírgulas para obter as entradas individuais dos alunos
    • Para cada entrada, dividir por dois-pontos para separar o nome, o ID e a nota
    • Converter a string do ID em um número inteiro
    • Criar uma struct Student e adicioná-la ao mapa, usando o nome como chave
  4. Exibir todos os alunos em ordem alfabética pelo nome no formato: "[name]: ID [id], Grade [grade]"
  5. Calcular e exibir as estatísticas das notas:
    • Contar quantos alunos têm cada nota (A, B, C, D, F)
    • Exibir a contagem de cada nota que aparecer no formato: "Grade [grade]: [count] students"
    • Exibir as notas em ordem alfabética (A, B, C, D, F)
  6. Encontrar e exibir o aluno com o maior ID no formato: "Highest ID: [name] ([id])"
  7. Exibir o número total de alunos: "Total students: [count]"

Use o pacote strconv para converter a string do ID em um número inteiro e o pacote sort para ordenar os nomes dos alunos alfabeticamente. Este desafio demonstra como mapas com valores struct oferecem uma maneira eficiente de organizar e acessar coleções de dados complexas usando identificadores significativos.

Experimente você mesmo

package main

import (
	"fmt"
)

func main() {
	// Ler entrada
	var numStudentsStr string
	var studentData string
	fmt.Scanln(&numStudentsStr)
	fmt.Scanln(&studentData)
	
	// TODO: Definir a struct Student aqui
	
	// TODO: Criar um mapa para armazenar alunos (nome como chave, struct Student como valor)
	
	// TODO: Analisar os dados dos alunos e preencher o mapa
	
	// TODO: Exibir todos os alunos em ordem alfabética por nome
	
	// TODO: Calcular e exibir estatísticas de notas
	
	// TODO: Encontrar e exibir o aluno com o ID mais alto
	
	// TODO: Exibir o número total de alunos
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica & Fluxo

Pratique por conta própria: Compilador de Go online