Menu
Coddy logo textTech

Mappe di struct

Fa parte della sezione Logica e flusso del percorso GO di Coddy. Lezione 26 di 68.

Le map diventano incredibilmente potenti quando memorizzi le struct come valori. Questo schema ti consente di organizzare dati complessi e strutturati usando chiavi significative per facilitarne la ricerca e il recupero.

Quando usi le struct come valori di una mappa, stai essenzialmente creando una raccolta in cui ogni chiave punta a un record di dati completo. Ecco come dichiarare e inizializzare una mappa di questo tipo:

type Student struct {
    ID    int
    Grade string
}

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

Puoi accedere ai dati della struct e lavorarci tramite la mappa, proprio come con qualsiasi altra operazione sulle mappe. Per ottenere le informazioni di uno studente, ti basta usare il suo nome come chiave:

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

Questo schema è estremamente comune nelle applicazioni Go per archiviare raccolte di dati correlati, come profili utente, cataloghi di prodotti o impostazioni di configurazione, quando servono sia dati strutturati sia un accesso rapido basato su chiavi.

challenge icon

Sfida

Facile

Crea un sistema di gestione dei voti degli studenti usando mappe con struct come valori. Questa sfida mostra come organizzare dati complessi sugli studenti usando chiavi significative per cercarli e recuperarli in modo efficiente.

Riceverai due input:

  • Una stringa che rappresenta il numero di studenti (ad es., "4")
  • Una stringa contenente i dati degli studenti nel formato: "name1:id1:grade1,name2:id2:grade2,name3:id3:grade3" (ad es., "Alice:101:A,Bob:102:B,Charlie:103:C,Diana:104:A")

Il tuo compito è:

  1. Definire una struct Student con i seguenti campi:
    • ID (int) - il numero ID dello studente
    • Grade (string) - il voto in lettere dello studente
  2. Creare una mappa in cui le chiavi sono i nomi degli studenti (stringhe) e i valori sono struct Student
  3. Analizzare i dati degli studenti dal secondo input:
    • Suddividere l'input usando le virgole per ottenere le singole voci degli studenti
    • Per ogni voce, suddividere usando i due punti per separare nome, ID e voto
    • Convertire la stringa ID in un intero
    • Creare una struct Student e aggiungerla alla mappa usando il nome come chiave
  4. Visualizzare tutti gli studenti in ordine alfabetico per nome nel formato: "[name]: ID [id], Grade [grade]"
  5. Calcolare e visualizzare le statistiche dei voti:
    • Contare quanti studenti hanno ciascun voto (A, B, C, D, F)
    • Visualizzare il conteggio per ogni voto presente nel formato: "Grade [grade]: [count] students"
    • Visualizzare i voti in ordine alfabetico (A, B, C, D, F)
  6. Trovare e visualizzare lo studente con l'ID più alto nel formato: "Highest ID: [name] ([id])"
  7. Visualizzare il numero totale di studenti: "Total students: [count]"

Usa il pacchetto strconv per convertire la stringa ID in un intero e il pacchetto sort per ordinare alfabeticamente i nomi degli studenti. Questa sfida mostra come le mappe con valori struct offrano un modo efficiente per organizzare e accedere a raccolte di dati complessi usando identificatori significativi.

Provalo tu

package main

import (
	"fmt"
)

func main() {
	// Leggi l'input
	var numStudentsStr string
	var studentData string
	fmt.Scanln(&numStudentsStr)
	fmt.Scanln(&studentData)
	
	// TODO: Definisci qui la struct Student
	
	// TODO: Crea una mappa per memorizzare gli studenti (name come chiave, struct Student come valore)
	
	// TODO: Analizza i dati degli studenti e popola la mappa
	
	// TODO: Mostra tutti gli studenti in ordine alfabetico per nome
	
	// TODO: Calcola e mostra le statistiche sui voti
	
	// TODO: Trova e mostra lo studente con l'ID più alto
	
	// TODO: Mostra il numero totale di studenti
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore Go online