Menu
CoddyTech

Zagnieżdżone słowniki

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

Wartością w słowniku może być inny słownik. Zagnieżdżony słownik grupuje powiązane dane: klucze zewnętrzne nazywają rekordy, a każdy słownik wewnętrzny przechowuje pola jednego rekordu.

var heroes := {
	"Mia": {"hp": 100, "class": "mage"},
	"Leo": {"hp": 80, "class": "knight"}
}

Łącz klucze, aby dotrzeć do wartości wewnątrz. heroes["Mia"] to wewnętrzny słownik Mii, a ["hp"] odczytuje z niego wartość. Przypisania działają tak samo:

print(heroes["Mia"]["hp"]) # 100
heroes["Leo"]["hp"] -= 30 # Leo otrzymuje obrażenia
heroes["Mia"]["mana"] = 50 # dodaje parę tylko do Mia
print(heroes["Mia"])
{ "hp": 100, "class": "mage", "mana": 50 }

Aby dodać cały rekord, przypisz słownik do nowego klucza zewnętrznego: heroes["Ana"] = {"hp": 90, "class": "archer"}.

Brakujący klucz na dowolnym poziomie jest błędem. Gdy rekordu może brakować, wywołaj get() z pustym słownikiem jako wartością domyślną, a następnie ponownie wywołaj get() na otrzymanym wyniku:

print(heroes.get("Zed", {}).get("hp", 0)) # 0

Aby uzyskać dostęp do każdej wewnętrznej wartości, przejdź pętlą po kluczach zewnętrznych i odczytaj wartości z każdego wewnętrznego słownika:

var total_hp := 0
for hero in heroes:
	total_hp += heroes[hero]["hp"]
print(total_hp) # 150
challenge icon

Wyzwanie

Łatwy

Podano zagnieżdżony słownik inventory: każdy klucz zewnętrzny oznacza dział, każdy klucz wewnętrzny — produkt, a każda wartość wewnętrzna — ilość w magazynie.

Program odczytuje jeden wiersz: ścieżki zapisane jako department/item, oddzielone przecinkami. Dla każdej ścieżki, w podanej kolejności, wypisz jeden wiersz:

  • ścieżkę, dwukropek, spację i ilość, jeśli dany dział ma ten produkt
  • ścieżkę, po której następuje : missing, jeśli dział lub produkt nie istnieje

Następnie wypisz Total inventory: , po czym podaj sumę wszystkich ilości we wszystkich działach.

Dla danych wejściowych fruits/apples,meat/beef,fruits/kiwis,candy/gum wynik to:

fruits/apples: 12
meat/beef: 7
fruits/kiwis: missing
candy/gum: missing
Total inventory: 39

Spróbuj swoich sił

extends Node

func _ready():
	var inventory := {
		"fruits": {"apples": 12, "bananas": 4},
		"meat": {"beef": 7, "chicken": 5},
		"dairy": {"milk": 9, "cheese": 2}
	}
	var lookups := OS.read_string_from_stdin().split(",")

	# Wypisz ilość dla każdej wyszukiwanej pozycji albo informację o jej braku

	# Wypisz sumę wszystkich ilości
	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