Menu
Coddy logo textTech

Mapy struktur

Część sekcji Logika i przepływ sterowania ścieżki GO w Coddy. Lekcja 26 z 68.

Mapy stają się niezwykle przydatne, gdy przechowujesz struktury jako wartości. Ten wzorzec pozwala organizować złożone, uporządkowane dane za pomocą znaczących kluczy, które ułatwiają wyszukiwanie i pobieranie danych.

Używając struktur jako wartości mapy, tworzysz w istocie kolekcję, w której każdy klucz wskazuje na kompletny rekord danych. Oto jak zadeklarować i zainicjować taką mapę:

type Student struct {
    ID    int
    Grade string
}

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

Możesz uzyskiwać dostęp do danych struktury i pracować z nimi za pośrednictwem mapy, tak jak przy każdej innej operacji na mapie. Aby uzyskać informacje o uczniu, wystarczy użyć jego imienia jako klucza:

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

Ten wzorzec jest niezwykle powszechny w aplikacjach Go do przechowywania kolekcji powiązanych danych, takich jak profile użytkowników, katalogi produktów czy ustawienia konfiguracji, gdy potrzebujesz zarówno uporządkowanych danych, jak i szybkiego dostępu na podstawie klucza.

challenge icon

Wyzwanie

Łatwy

Utwórz system zarządzania ocenami uczniów, używając map, w których wartościami są struktury. To wyzwanie pokazuje, jak organizować złożone dane uczniów za pomocą znaczących kluczy, aby efektywnie wyszukiwać i pobierać informacje.

Otrzymasz dwa dane wejściowe:

  • Łańcuch znaków reprezentujący liczbę uczniów (np. "4")
  • Łańcuch znaków zawierający dane uczniów w formacie: "name1:id1:grade1,name2:id2:grade2,name3:id3:grade3" (np. "Alice:101:A,Bob:102:B,Charlie:103:C,Diana:104:A")

Twoje zadanie:

  1. Zdefiniuj strukturę Student z następującymi polami:
    • ID (int) — numer ID ucznia
    • Grade (string) — ocena literowa ucznia
  2. Utwórz mapę, w której kluczami są imiona uczniów (łańcuchy znaków), a wartościami struktury Student
  3. Przetwórz dane uczniów z drugiego wejścia:
    • Podziel dane wejściowe po przecinkach, aby uzyskać osobne wpisy uczniów
    • Dla każdego wpisu podziel go po dwukropkach, aby oddzielić imię, ID i ocenę
    • Konwertuj łańcuch znaków ID na liczbę całkowitą
    • Utwórz strukturę Student i dodaj ją do mapy, używając imienia jako klucza
  4. Wyświetl wszystkich uczniów w kolejności alfabetycznej według imion, w formacie: "[name]: ID [id], Grade [grade]"
  5. Oblicz i wyświetl statystyki ocen:
    • Policz, ilu uczniów ma każdą ocenę (A, B, C, D, F)
    • Wyświetl liczbę uczniów dla każdej występującej oceny w formacie: "Grade [grade]: [count] students"
    • Wyświetl oceny w kolejności alfabetycznej (A, B, C, D, F)
  6. Znajdź i wyświetl ucznia z najwyższym ID w formacie: "Highest ID: [name] ([id])"
  7. Wyświetl łączną liczbę uczniów: "Total students: [count]"

Użyj pakietu strconv, aby skonwertować łańcuch znaków ID na liczbę całkowitą, oraz pakietu sort, aby posortować imiona uczniów alfabetycznie. To wyzwanie pokazuje, jak mapy z wartościami będącymi strukturami pozwalają efektywnie organizować zbiory złożonych danych i uzyskiwać do nich dostęp za pomocą znaczących identyfikatorów.

Spróbuj swoich sił

package main

import (
	"fmt"
)

func main() {
	// Wczytaj dane wejściowe
	var numStudentsStr string
	var studentData string
	fmt.Scanln(&numStudentsStr)
	fmt.Scanln(&studentData)
	
	// TODO: Zdefiniuj tutaj strukturę Student
	
	// TODO: Utwórz mapę do przechowywania studentów (imię jako klucz, struktura Student jako wartość)
	
	// TODO: Przeanalizuj dane studentów i wypełnij mapę
	
	// TODO: Wyświetl wszystkich studentów w kolejności alfabetycznej według imienia
	
	// TODO: Oblicz i wyświetl statystyki ocen
	
	// TODO: Znajdź i wyświetl studenta o najwyższym ID
	
	// TODO: Wyświetl łączną liczbę studentów
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i przepływ sterowania

Poćwicz samodzielnie: Kompilator Go online