Wzorce słowników
Część sekcji Logika i przepływ programu ścieżki GDScript w Coddy. Lekcja 9 z 78.
Wzorzec słownikowy zawiera klucze i wzorce, którym muszą odpowiadać ich wartości. Pasuje do słownika zawierającego dokładnie te klucze, w dowolnej kolejności:
var event := {"type": "move", "dir": "left"}
match event:
{"type": "jump"}:
print("Jump!")
{"type": "move", "dir": var d}:
print("Moving ", d)Moving leftWartość "type" musi wynosić "move", a wartość "dir", cokolwiek to jest, jest przechowywana w d. Słownik z kluczem, którego nie wymieniono we wzorcu, nie pasuje. Dodaj .. na końcu, aby zezwolić na dodatkowe klucze:
var hit := {"type": "attack", "damage": 30, "crit": true}
match hit:
{"type": "attack", "damage": _}:
print("Exactly two keys")
{"type": "attack", "damage": var dmg, ..}:
print("Hit for ", dmg)Hit for 30Klucz zapisany bez wartości sprawdza tylko, czy klucz istnieje: {"name", ..}: pasuje do każdego słownika, który ma klucz "name". Tutaj również działają warunki ochronne: {"type": "attack", "damage": var dmg} when dmg > 50:.
Wyzwanie
ŁatwyProgram odczytuje zdarzenie z gry zapisane jako pary key=value oddzielone przecinkami, na przykład type=move,dir=left, i przechowuje je w słowniku event (który jest już zapisany). Wszystkie wartości są ciągami znaków.
Użyj instrukcji match ze wzorcami słowników, w następującej kolejności:
- Dokładnie klucze
type("move") idir: wypiszMovingi kierunek - Dokładnie klucze
type("attack") idamage: wypiszTaking, obrażenia idamage typema wartość"heal", a występują też dowolne inne klucze: wypiszHealing- Dowolny inny słownik z kluczem
type: wypiszUnknown event:i typ - W każdym innym przypadku: wypisz
Invalid event
Dla wejścia type=attack,damage=30 wynikiem jest:
Taking 30 damageZdarzenie takie jak type=move,dir=up,speed=2 ma dodatkowy klucz, więc wypisuje Unknown event: move.
Spróbuj swoich sił
extends Node
func _ready():
var event := {}
for pair in OS.read_string_from_stdin().split(","):
var kv := pair.split("=")
event[kv[0]] = kv[1]
# Dopasuj event do wzorców słownikowych
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 programu
1Łańcuchy znaków — zagadnienia zaawansowane
Metody łańcuchów znakówWyszukiwanie w łańcuchach znakówZastępowanie i przycinanieDzielenie i łączeniePodsumowanie — sprawdzanie nazwy użytkownika4Słowniki, część 2
Zagnieżdżone słownikiTablice słownikówŁączenie słownikówKopiowanie słownikówPodsumowanie – licznik częstotliwości7Typy wyliczeniowe
Czym jest typ wyliczeniowy?Definiowanie typu wyliczeniowegoWartości typu wyliczeniowegoTypy wyliczeniowe w matchPowtórka – sygnalizacja świetlna10Zaawansowane funkcje
Zwracanie wielu wartościFunkcje lambda — część 1Funkcje lambda — część 2Powtórka — sortowanie za pomocą lambdaFunkcje rekurencyjne — część 1Funkcje rekurencyjne — część 2Powtórka — sumowanie zagnieżdżonej tablicy13System zarządzania zapasami
Omówienie projektuDodawanie produktu2Zaawansowane podejmowanie decyzji
Dopasowanie ze zmiennymiStrażnicy dopasowaniaWzorce tablicWzorce słownikówSprawdzanie przynależnościPowtórka — parser poleceń5Aplikacja książki kontaktów
Wyświetlanie menuDodawanie kontaktu8Menedżer danych studentów
Przegląd projektuDodaj studenta3Tablice wielowymiarowe
Podstawy tablic 2DDostęp do elementów tablic 2DPętle zagnieżdżone z tablicami 2DPodsumowanie — tablice 2DTablice postrzępioneTypowe wzorce tablic 2DPodsumowanie — plansza do gry6Zbiory ze słownikami
Czym jest zbiór?Słownik jako zbiórDodawanie i usuwanieSuma i część wspólnaRóżnica zbiorówPowtórka – usuwanie duplikatów9Zaawansowana agregacja danych
Sumowanie wartościZnajdowanie minimum i maksimumSortowanie niestandardowePodsumowanie – Sortownik słownikówPoćwicz samodzielnie: Kompilator GDScript online