Kopiowanie słowników
Część sekcji Logika i przepływ programu ścieżki GDScript w Coddy. Lekcja 22 z 78.
Przypisanie słownika do innej zmiennej nie kopiuje go. Obie zmienne wskazują na ten sam słownik, więc zmiana wprowadzona przez jedną jest widoczna przez drugą:
var template := {"type": "slime", "hp": 30}
var enemy := template
enemy["hp"] = 10
print(template["hp"]) # 10duplicate() tworzy nowy słownik z tymi samymi parami. Zmiana kopii nie wpływa na oryginał:
var original := {"type": "slime", "hp": 30}
var copy := original.duplicate()
copy["hp"] = 99
print(original["hp"]) # 30duplicate() tworzy płytką kopię: kopia ma własne pary, ale wartość będąca tablicą lub słownikiem jest nadal współdzielona przez oba obiekty:
var hero := {"stats": {"hp": 100}, "items": ["sword"]}
var clone := hero.duplicate()
clone["stats"]["hp"] = 1
clone["items"].append("shield")
print(hero){ "stats": { "hp": 1 }, "items": ["sword", "shield"] }Przekaż true, aby utworzyć głęboką kopię: duplicate(true) kopiuje również każdą znajdującą się wewnątrz tablicę i słownik, więc oba obiekty nie współdzielą żadnych danych:
var twin := hero.duplicate(true)
twin["stats"]["hp"] = 50
print(hero["stats"]["hp"]) # 1Kopia płytka wystarczy, gdy każda wartość jest liczbą, ciągiem znaków lub wartością logiczną. Gdy tylko wartość jest tablicą lub słownikiem, użyj duplicate(true). Tablice działają tak samo: grid.duplicate(true) kopiuje tablicę 2D wraz z jej wierszami.
Wyzwanie
ŁatwyUtwórz falę przeciwników na podstawie szablonu. Podany jest słownik template. Program odczytuje dwie liczby całkowite, po jednej w wierszu: ilu przeciwników utworzyć (n) oraz premię do hp.
Dla każdego numeru przeciwnika i od 1 do n:
- Utwórz kopię
template, która nie współdzieli z nim żadnych danych. - Dodaj klucz
"id"o wartościi. - Dodaj
bonus * ido"hp"wewnątrz"stats". - Jeśli jest to ostatni przeciwnik, dołącz
"crown"do jego"loot". - Wypisz przeciwnika.
Na koniec wypisz Template: , a następnie szablon, który musi pozostać niezmieniony. Dla danych wejściowych 2 i 10 wynikiem jest:
{ "type": "slime", "stats": { "hp": 40, "speed": 2 }, "loot": ["gel"], "id": 1 }
{ "type": "slime", "stats": { "hp": 50, "speed": 2 }, "loot": ["gel", "crown"], "id": 2 }
Template: { "type": "slime", "stats": { "hp": 30, "speed": 2 }, "loot": ["gel"] }Spróbuj swoich sił
extends Node
func _ready():
var template := {"type": "slime", "stats": {"hp": 30, "speed": 2}, "loot": ["gel"]}
var n := int(OS.read_string_from_stdin())
var bonus := int(OS.read_string_from_stdin())
# Utwórz i wypisz n wrogów
# Wypisz szablon
pass
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