Menu
Coddy logo textTech

Maps von Structs

Teil des Abschnitts Logik & Ablauf der GO-Journey von Coddy — Lektion 26 von 68.

Maps werden unglaublich mächtig, wenn Sie Structs als Werte speichern. Dieses Muster ermöglicht es Ihnen, komplexe, strukturierte Daten zu organisieren, indem Sie aussagekräftige Schlüssel für eine einfache Suche und Abfrage verwenden.

Wenn Sie Structs als Map-Werte verwenden, erstellen Sie im Wesentlichen eine Sammlung, bei der jeder Schlüssel auf einen vollständigen Datensatz verweist. So deklarieren und initialisieren Sie eine solche Map:

type Student struct {
    ID    int
    Grade string
}

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

Sie können auf die Struct-Daten über die Map zugreifen und damit arbeiten, genau wie bei jeder anderen Map-Operation. Um die Informationen eines Schülers abzurufen, verwenden Sie einfach dessen Namen als Schlüssel:

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

Dieses Muster ist in Go-Anwendungen äußerst verbreitet, um Sammlungen zusammengehöriger Daten zu speichern, wie z. B. Benutzerprofile, Produktkataloge oder Konfigurationseinstellungen, bei denen Sie sowohl strukturierte Daten als auch einen schnellen schlüsselbasierten Zugriff benötigen.

quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

challenge icon

Aufgabe

Einfach

Erstellen Sie ein Schüler-Notenverwaltungssystem unter Verwendung von Maps mit Structs als Werten. Diese Herausforderung zeigt, wie man komplexe Schülerdaten mithilfe aussagekräftiger Schlüssel für eine effiziente Suche und Abfrage organisiert.

Sie erhalten zwei Eingaben:

  • Einen String, der die Anzahl der Schüler darstellt (z. B. "4")
  • Einen String, der die Schülerdaten im Format "name1:id1:grade1,name2:id2:grade2,name3:id3:grade3" enthält (z. B. "Alice:101:A,Bob:102:B,Charlie:103:C,Diana:104:A")

Ihre Aufgabe ist es:

  1. Definieren Sie einen Student-Struct mit den folgenden Feldern:
    • ID (int) - die ID-Nummer des Schülers
    • Grade (string) - die Note des Schülers als Buchstabe
  2. Erstellen Sie eine Map, in der die Schlüssel Schülernamen (Strings) und die Werte Student-Structs sind
  3. Parsen Sie die Schülerdaten aus der zweiten Eingabe:
    • Teilen Sie die Eingabe nach Kommas auf, um einzelne Schülereinträge zu erhalten
    • Teilen Sie jeden Eintrag nach Doppelpunkten auf, um Name, ID und Note zu trennen
    • Konvertieren Sie den ID-String in eine Ganzzahl (Integer)
    • Erstellen Sie einen Student-Struct und fügen Sie ihn der Map mit dem Namen als Schlüssel hinzu
  4. Geben Sie alle Schüler in alphabetischer Reihenfolge nach Namen im Format "[name]: ID [id], Grade [grade]" aus
  5. Berechnen und zeigen Sie Notenstatistiken an:
    • Zählen Sie, wie viele Schüler jede Note haben (A, B, C, D, F)
    • Geben Sie die Anzahl für jede vorkommende Note im Format "Grade [grade]: [count] students" aus
    • Geben Sie die Noten in alphabetischer Reihenfolge aus (A, B, C, D, F)
  6. Finden und zeigen Sie den Schüler mit der höchsten ID im Format "Highest ID: [name] ([id])" an
  7. Geben Sie die Gesamtzahl der Schüler aus: "Total students: [count]"

Verwenden Sie das Paket strconv, um den ID-String in eine Ganzzahl zu konvertieren, und das Paket sort, um die Schülernamen alphabetisch zu sortieren. Diese Herausforderung zeigt, wie Maps mit Struct-Werten eine effiziente Möglichkeit bieten, komplexe Datensammlungen mithilfe aussagekräftiger Identifikatoren zu organisieren und darauf zuzugreifen.

Spickzettel

Maps können Structs als Werte speichern und so Sammlungen erstellen, bei denen jeder Schlüssel auf einen vollständigen Datensatz verweist:

type Student struct {
    ID    int
    Grade string
}

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

Greifen Sie über den Schlüssel auf Struct-Daten in der Map zu:

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

Dieses Muster wird häufig zum Speichern von Sammlungen verwandter Daten wie Benutzerprofilen, Produktkatalogen oder Konfigurationseinstellungen verwendet, bei denen Sie sowohl strukturierte Daten als auch einen schnellen schlüsselbasierten Zugriff benötigen.

Probier es selbst

package main

import (
	"fmt"
)

func main() {
	// Eingabe lesen
	var numStudentsStr string
	var studentData string
	fmt.Scanln(&numStudentsStr)
	fmt.Scanln(&studentData)
	
	// TODO: Student-Struktur hier definieren
	
	// TODO: Eine Map erstellen, um Studenten zu speichern (Name als Schlüssel, Student-Struktur als Wert)
	
	// TODO: Die Studentendaten parsen und die Map füllen
	
	// TODO: Alle Studenten in alphabetischer Reihenfolge nach Namen anzeigen
	
	// TODO: Notenstatistik berechnen und anzeigen
	
	// TODO: Den Studenten mit der höchsten ID finden und anzeigen
	
	// TODO: Die Gesamtzahl der Studenten anzeigen
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Ablauf