Menu
CoddyTech

Firme di indice

Fa parte della sezione Introduzione a Luau del percorso Lua di Coddy. Lezione 78 di 80.

Hai incontrato tipi mappa come {[string]: number} nel capitolo sulle tabelle: una firma di indice: qualsiasi chiave stringa corrisponde a un valore numerico. Sono utili quando le chiavi non sono note mentre scrivi il codice: contatori, impostazioni, cache, punteggi: qualsiasi cosa venga creata in fase di esecuzione.

type Counts = {[string]: number}

local counts: Counts = {}
counts["potion"] = 3   -- è consentita qualsiasi chiave di tipo stringa
counts["sword"] = 1
counts["potion"] += 1  -- i valori vengono verificati come numeri

Quando lavori con le mappe, sono importanti due fatti relativi all'esecuzione. Primo, leggere una chiave a cui non è mai stato assegnato un valore restituisce nil: il classico schema di conteggio gestisce questo caso con or, trasformando il valore «mancante» in 0:

counts[item] = (counts[item] or 0) + 1

Secondo, pairs() scorre le chiavi di una mappa senza un ordine garantito: eseguendo lo stesso programma due volte, le chiavi potrebbero essere visitate in ordine diverso. Quando l'output deve essere prevedibile, raccogli le chiavi in un array, applica table.sort e scorri invece l'array ordinato:

local keys: {string} = {}
for key in pairs(counts) do
    table.insert(keys, key)
end
table.sort(keys)
for _, key in ipairs(keys) do
    print(`{key}: {counts[key]}`)
end
challenge icon

Sfida

Facile

Conserva i punteggi dei giocatori di cui non conosci in anticipo i nomi.

  1. Scrivi type Scores = {[string]: number} e crea local scores: Scores = {}.
  2. Aggiungi i punti: scores["mia"] = (scores["mia"] or 0) + 5, poi fai lo stesso per "leo" con 3.
  3. Stampa scores["mia"], scores["leo"] e scores["zed"].

Premi Run Code: l'output mostra 5, 3 e nil.

Provalo tu

-- 1) type Scores = {[string]: number}, poi local scores: Scores = {}
-- 2) aggiungi 5 punti per "mia" e 3 per "leo"
-- 3) stampa mia, leo e zed

Tutte le lezioni di Introduzione a Luau

Esercitati da solo: Compilatore Luau online