Menu
CoddyTech

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
dragon

Aggiungi 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"]) # 85

print() mostra l'intero array con tutti i dizionari al suo interno: [{ "type": "slime", "hp": 35 }, ...].

challenge icon

Sfida

Facile

Crea 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.

  1. Per ogni riga, aggiungi all’array players un dizionario con le chiavi "name" (il nome) e "score" (il punteggio come int).
  2. Stampa l’array.
  3. 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
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