Menu
Coddy logo textTech

Firme di indice

Fa parte della sezione Introduzione a Luau del percorso Lua di Coddy. Lezione 72 di 73.

Hai incontrato tipi mappa come {[string]: number} nel capitolo sulle tabelle: una firma di indice: qualsiasi chiave stringa corrisponde a un valore numerico. Sono particolarmente utili quando, mentre scrivi il codice, non conosci ancora le chiavi: contatori, impostazioni, cache, punteggi: qualsiasi cosa venga creata durante l'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 il caso con or, trasformando «mancante» in 0:

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

Secondo, pairs() scorre le chiavi di una mappa in un ordine non 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

Conta le ricompense ottenute con una mappa tipizzata.

  • Dichiara type Counts = {[string]: number}.
  • Scrivi countItems(items: {string}): Counts che crea una nuova mappa Counts, contando quante volte compare ogni stringa (usa lo schema (counts[item] or 0) + 1).
  • Crea local loot: {string} = {"potion", "sword", "potion", "shield", "potion", "sword"} e contala.
  • Stampa una riga [name]: [count] per ogni elemento distinto, in ordine alfabetico: raccogli le chiavi, ordinalle con table.sort, poi stampa.

Risultato previsto:

potion: 3
shield: 1
sword: 2

Provalo tu

-- Scrivi il codice qui
-- 1) type Counts = {[string]: number}
-- 2) countItems(items: {string}): Counts usando (counts[item] or 0) + 1
-- 3) conta gli elementi dell'array loot indicato nell'esercizio
-- 4) raccogli le chiavi, ordinale con table.sort e stampa righe nel formato `{name}: {count}`
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 Introduzione a Luau

Esercitati da solo: Compilatore Luau online