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: ATen 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.
Wyzwanie
ŁatwyUtwó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:
- Zdefiniuj strukturę
Studentz następującymi polami:ID(int) — numer ID uczniaGrade(string) — ocena literowa ucznia
- Utwórz mapę, w której kluczami są imiona uczniów (łańcuchy znaków), a wartościami struktury
Student - 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ę
Studenti dodaj ją do mapy, używając imienia jako klucza
- Wyświetl wszystkich uczniów w kolejności alfabetycznej według imion, w formacie:
"[name]: ID [id], Grade [grade]" - 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)
- Znajdź i wyświetl ucznia z najwyższym ID w formacie:
"Highest ID: [name] ([id])" - 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
}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
1Zaawansowane sterowanie przepływem
Instrukcja switch z `fallthrough`Przerywanie zagnieżdżonych pętliKontynuowanie określonej pętliInstrukcja `goto`Podsumowanie — zaawansowane sterowanie pętlami4Projekt: Prosta lista zadań
Konfiguracja projektuDodawanie zadania2Struktury i metody
Definiowanie metod dla strukturOdbiorniki przez wartośćOdbiorniki przez wskaźnikWybór odbiornikówMetody a funkcjePodsumowanie — działanie struktur5Mapy w szczegółach
Mapy strukturWskaźniki jako wartości mapSprawdzanie, czy mapy są nilPorównywanie mapPodsumowanie — licznik częstości słów3Interfejsy (podstawy)
Czym jest interfejs?Definiowanie interfejsuImplementowanie interfejsuUżywanie typów interfejsowychPusty interfejsAsercje typuPrzełącznik typówPodsumowanie – kształty i zachowaniaPoćwicz samodzielnie: Kompilator Go online