Menu
CoddyTech

Dizionari annidati

Fa parte della sezione Logica e flusso del percorso GDScript di Coddy. Lezione 19 di 78.

Un valore di un dizionario può essere un altro dizionario. Un dizionario annidato raggruppa dati correlati: le chiavi esterne identificano i record e ogni dizionario interno contiene i campi di un record.

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

Collega le chiavi per raggiungere un valore all'interno. heroes["Mia"] è il dizionario interno di Mia e ["hp"] legge da esso. Le assegnazioni funzionano allo stesso modo:

print(heroes["Mia"]["hp"]) # 100
heroes["Leo"]["hp"] -= 30 # Leo takes damage
heroes["Mia"]["mana"] = 50 # adds a pair to Mia only
print(heroes["Mia"])
{ "hp": 100, "class": "mage", "mana": 50 }

Per aggiungere un intero record, assegna un dizionario a una nuova chiave esterna: heroes["Ana"] = {"hp": 90, "class": "archer"}.

Una chiave mancante a uno dei due livelli è un errore. Quando un record potrebbe mancare, chiama get() con un dizionario vuoto come valore predefinito, poi chiama di nuovo get() sul risultato:

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

Per raggiungere ogni valore interno, itera sulle chiavi esterne e leggi da ciascun dizionario interno:

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

Sfida

Facile

È fornito il dizionario annidato inventory: ogni chiave esterna è un reparto, ogni chiave interna è un articolo e ogni valore interno è la quantità disponibile in magazzino.

Il programma legge una riga: consultazioni scritte come department/item, separate da virgole. Per ogni consultazione, nell'ordine, stampa una riga:

  • la consultazione, i due punti, uno spazio e la quantità, se quel reparto contiene quell'articolo
  • la consultazione seguita da : missing, se il reparto o l'articolo non esiste

Poi stampa Total inventory: seguito dalla somma di tutte le quantità di ogni reparto.

Per l'input fruits/apples,meat/beef,fruits/kiwis,candy/gum, l'output è:

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

Provalo tu

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(",")

	# Stampa la quantità per ogni ricerca, oppure missing

	# Stampa il totale di tutte le quantità
	pass
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore GDScript online