Menu
CoddyTech

Łączenie słowników

Część sekcji Logika i przepływ programu ścieżki GDScript w Coddy. Lekcja 21 z 78.

merge() dodaje każdą parę z innego słownika do słownika, na którym ją wywołujesz. Klucze, które występują tylko w drugim słowniku, są dodawane na końcu:

var settings := {"volume": 5, "difficulty": "normal"}
var saved := {"difficulty": "hard", "subtitles": true}
settings.merge(saved)
print(settings)
{ "volume": 5, "difficulty": "normal", "subtitles": true }

"difficulty" występuje w obu słownikach, a merge() zachowało wartość, którą miało już settings: domyślnie istniejące klucze nie są nadpisywane. Przekaż true jako drugi argument, aby wygrał drugi słownik:

var options := {"volume": 5, "difficulty": "normal"}
options.merge(saved, true)
print(options["difficulty"]) # hard

merge() zmienia sam słownik i nic nie zwraca, więc var result := a.merge(b) jest błędem. Aby zachować oba słowniki bez zmian, użyj merged(). Przyjmuje te same argumenty i zwraca nowy słownik:

var defaults := {"volume": 5, "difficulty": "normal"}
var choice := {"difficulty": "hard"}
var final_settings := defaults.merged(choice, true)
print(final_settings) # { "volume": 5, "difficulty": "hard" }
print(defaults) # { "volume": 5, "difficulty": "normal" }

Gdy klucz występuje w obu słownikach i chcesz połączyć wartości, na przykład zsumować dwie kwoty, napisz pętlę samodzielnie:

var bag := {"gold": 10, "gems": 1}
var loot := {"gold": 5, "keys": 2}
for key in loot:
	bag[key] = bag.get(key, 0) + loot[key]
print(bag) # { "gold": 15, "gems": 1, "keys": 2 }
challenge icon

Wyzwanie

Łatwy

Aktualizacja gry dodała nowe ustawienia. Zapisane ustawienia gracza są odczytywane z jednego wiersza danych wejściowych, zapisanego jako pary key=value rozdzielone przecinkami (wiersz może być pusty). Podany kod przechowuje je w słowniku saved.

Uzupełnij brakujące ustawienia w zapisie: dodaj do saved każdą parę z defaults, której klucza jeszcze w nim nie ma, nie zmieniając wartości wybranych przez gracza ani nie modyfikując defaults. Następnie wypisz saved, a w kolejnym wierszu wypisz defaults.

Dla danych wejściowych difficulty=hard,volume=8 wynikiem jest:

{ "difficulty": "hard", "volume": "8", "subtitles": "off", "language": "en" }
{ "difficulty": "normal", "volume": "5", "subtitles": "off", "language": "en" }

Spróbuj swoich sił

extends Node

func _ready():
	var defaults := {"difficulty": "normal", "volume": "5", "subtitles": "off", "language": "en"}
	var saved := {}
	for pair in OS.read_string_from_stdin().split(",", false):
		var parts := pair.split("=")
		saved[parts[0]] = parts[1]

	# Dodaj brakujące wartości domyślne do saved, a następnie wypisz oba słowniki
	pass
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 programu

Poćwicz samodzielnie: Kompilator GDScript online