Array di dizionari
Fa parte della sezione Logica e flusso del percorso GDScript di Coddy. Lezione 20 di 78.
Quando hai molti record con gli stessi campi, memorizzali in un array di dizionari: ogni elemento è un record.
var enemies := [
{"type": "slime", "hp": 30},
{"type": "orc", "hp": 80},
{"type": "dragon", "hp": 500}
]Un indice seleziona il record e una chiave seleziona il campo: enemies[1]["type"] è "orc". Un ciclo for ti fornisce un dizionario per iterazione:
for enemy in enemies:
if enemy["hp"] >= 80:
print(enemy["type"])orc
dragonAggiungi un record con append(). Per modificare un campo di ogni record, assegna un valore tramite la variabile del ciclo. Come gli array, i dizionari sono condivisi, non copiati, quindi enemy è il dizionario all'interno dell'array e la modifica rimane lì:
enemies.append({"type": "bat", "hp": 10})
for enemy in enemies:
enemy["hp"] += 5
print(enemies[3]) # { "type": "bat", "hp": 15 }Per trovare un record in base a uno dei suoi campi, esegui un ciclo e confronta. Parti da null, così puoi capire quando non c'è stata alcuna corrispondenza:
var found = null
for enemy in enemies:
if enemy["type"] == "orc":
found = enemy
if found == null:
print("No orc")
else:
print(found["hp"]) # 85print() mostra l'intero array con tutti i dizionari al suo interno: [{ "type": "slime", "hp": 35 }, ...].
Sfida
FacileCrea una classifica. Il programma legge un numero intero n, poi n righe, ciascuna con il nome di un giocatore e un punteggio separati da una virgola, come Mia,95.
- Per ogni riga, aggiungi all’array
playersun dizionario con le chiavi"name"(il nome) e"score"(il punteggio comeint). - Stampa l’array.
- Stampa
Best:, il nome del giocatore con il punteggio più alto e il punteggio tra parentesi. Se due giocatori hanno lo stesso punteggio più alto, stampa il primo.
Per gli input 3, Mia,95, Leo,80 e Ana,97, l’output è:
[{ "name": "Mia", "score": 95 }, { "name": "Leo", "score": 80 }, { "name": "Ana", "score": 97 }]
Best: Ana (97)Provalo tu
extends Node
func _ready():
var n := int(OS.read_string_from_stdin())
var players := []
# Leggi gli n giocatori nell'array
# Stampa l'array e il giocatore migliore
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