Copiare dizionari
Fa parte della sezione Logica e flusso del percorso GDScript di Coddy. Lezione 22 di 78.
Assegnare un dizionario a un’altra variabile non lo copia. Entrambe le variabili fanno riferimento allo stesso dizionario, quindi una modifica apportata tramite una si riflette anche nell’altra:
var template := {"type": "slime", "hp": 30}
var enemy := template
enemy["hp"] = 10
print(template["hp"]) # 10duplicate() crea un nuovo dizionario con le stesse coppie. Modificare la copia non altera l'originale:
var original := {"type": "slime", "hp": 30}
var copy := original.duplicate()
copy["hp"] = 99
print(original["hp"]) # 30duplicate() crea una copia superficiale: la copia ha le proprie coppie, ma un valore che è un array o un dizionario è comunque condiviso tra i due:
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"] }Passa true per una copia profonda: duplicate(true) copia anche ogni array e dizionario al suo interno, così i due non condividono nulla:
var twin := hero.duplicate(true)
twin["stats"]["hp"] = 50
print(hero["stats"]["hp"]) # 1Una copia superficiale è sufficiente quando ogni valore è un numero, una stringa o un booleano. Non appena un valore è un array o un dizionario, usa duplicate(true). Gli array funzionano allo stesso modo: grid.duplicate(true) copia un array 2D insieme alle sue righe.
Sfida
FacileGenera un'ondata di nemici da un modello. Il dizionario template è fornito. Il programma legge due numeri interi, uno per riga: quanti nemici generare (n) e un bonus di hp.
Per ogni numero di nemico i da 1 a n:
- Crea una copia di
templateche non condivida nulla con esso. - Aggiungi la chiave
"id"con il valorei. - Aggiungi
bonus * ia"hp"all'interno di"stats". - Se è l'ultimo nemico, aggiungi
"crown"a"loot". - Stampa il nemico.
Infine, stampa Template: seguito dal modello, che deve rimanere invariato. Per gli input 2 e 10, l'output è:
{ "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"] }Provalo tu
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())
# Genera e stampa i n nemici
# Stampa il template
pass
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Stringhe in dettaglio
Metodi delle stringheRicerca nelle stringheSostituzione e trimDividere e unireRipasso - verifica del nome utente4Dizionari - Parte 2
Dizionari annidatiArray di dizionariUnire dizionariCopiare dizionariRiepilogo - Contatore di frequenza7Enumerazioni
Che cos'è un'enumerazione?Definire un'enumerazioneValori dell'enumerazioneEnumerazioni in MatchRiepilogo - Semaforo10Funzioni avanzate
Restituire più valoriFunzioni lambda - Parte 1Funzioni lambda - Parte 2Ripasso - Ordinamento con lambdaFunzioni ricorsive - Parte 1Funzioni ricorsive - Parte 2Ripasso - Somma di un array annidato13Sistema di gestione dell'inventario
Panoramica del progettoAggiungere un articolo2Decisioni avanzate
Match con variabiliGuardie di matchPattern per arrayPattern per dizionariVerifiche di appartenenzaRiepilogo - Parser di comandi5Applicazione Rubrica
Visualizzare il menuAggiungere un contatto8Gestione dei registri degli studenti
Panoramica del progettoAggiungi studente11Funzioni di ordine superiore
Il metodo mapIl metodo filterIl metodo reduceany e allRipasso - Validatore di emailRipasso - Elaboratore di numeri3Array multidimensionali
Fondamenti degli array 2DAccedere agli elementi di un array 2DCicli annidati con array 2DRipasso - Array 2DArray frastagliatiSchemi comuni con gli array 2DRipasso - Tabellone di gioco6Insiemi con i dizionari
Che cos'è un insieme?Il dizionario come insiemeAggiungere e rimuovereUnione e intersezioneDifferenza tra insiemiRiepilogo - Rimuovere i duplicati9Aggregazione avanzata dei dati
Somma dei valoriTrovare minimo e massimoOrdinamento personalizzatoRiepilogo - Ordinatore di dizionariEsercitati da solo: Compilatore GDScript online