Menu
CoddyTech

Unire dizionari

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

merge() aggiunge ogni coppia dell'altro dizionario al dizionario su cui la chiami. Le chiavi presenti solo nell'altro dizionario vengono aggiunte alla fine:

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

"difficulty" è presente in entrambi i dizionari e merge() ha mantenuto il valore che settings aveva già: per impostazione predefinita, le chiavi esistenti non vengono sovrascritte. Passa true come secondo argomento per far prevalere l'altro dizionario:

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

merge() modifica il dizionario stesso e non restituisce nulla, quindi var result := a.merge(b) è un errore. Per mantenere entrambi i dizionari invariati, usa merged(). Accetta gli stessi argomenti e restituisce un nuovo dizionario:

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" }

Quando una chiave è presente in entrambi i dizionari e vuoi combinare i valori, ad esempio sommare due importi, scrivi tu il ciclo:

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

Sfida

Facile

Un aggiornamento del gioco ha aggiunto nuove impostazioni. Le impostazioni salvate dal giocatore vengono lette da una riga di input, scritte come coppie key=value separate da virgole (la riga può essere vuota). Il codice fornito le memorizza nel dizionario saved.

Completa le impostazioni mancanti nel salvataggio: aggiungi a saved ogni coppia di defaults la cui chiave non è ancora presente, senza modificare i valori scelti dal giocatore e senza modificare defaults. Poi stampa saved e stampa defaults nella riga successiva.

Per l'input difficulty=hard,volume=8, l'output è:

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

Provalo tu

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]

	# Aggiungi a saved i valori predefiniti mancanti, poi stampa entrambi i dizionari
	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