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 numeriQuando 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) + 1Secondo, 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]}`)
endSfida
FacileConta le ricompense ottenute con una mappa tipizzata.
- Dichiara
type Counts = {[string]: number}. - Scrivi
countItems(items: {string}): Countsche crea una nuova mappaCounts, 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 contable.sort, poi stampa.
Risultato previsto:
potion: 3
shield: 1
sword: 2Provalo 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}`
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Introduzione a Luau
1Per iniziare con Luau
Che cos'è Luau?Perché usare Luau?Il tuo primo codice LuauVerifica dei tipi e modalità di erroreRiepilogo: introduzione a Luau4Lavorare con le funzioni
Tipizzare i parametri e i valori restituitiTipizzare le funzioni anonimeFunzioni che non restituiscono nullaParametri opzionaliValori predefiniti dei parametriFunzioni variadicheDefinire i tipi di funzioneRiepilogo: funzioni tipizzate2Tipi fondamentali
Tipi di base: num, str, boolIl tipo 'any': una via di fugaIl tipo 'unknown'Nil e tipi opzionaliL'inferenza dei tipi in azioneAnnotazioni esplicite dei tipiRipasso: esercizi sui tipi fondamentali5Alias, unioni e intersezioni
Alias di tipo per i primitiviTipi unioneLavorare con i tipi unioneTipi letteraliTipi intersezioneCombinare gli alias di tipoRiepilogo: combinazioni avanzate di tipi8Gli enum, secondo lo stile di Luau
Il pattern degli enum in LuauEnum numerici con le tabelleEnum di stringhe come unioniUsare enum con unioni di valori letteraliCongelare le tabelle costantiRiepilogo: gli enum, secondo lo stile di Luau11Argomenti avanzati
Asserzioni di tipoControlli di tipo con typeofIl tipo neverSicurezza rispetto a nil in modalità strictFirme di indiceRiepilogo: perfezionare i tipi3Tabelle tipizzate: array e mappe
Array tipizzatiAggiungere e leggere elementiChe cos'è un tipo Map?Dichiarare e accedere alle mappeIterare sulle tabelleTabelle con strutture misteArray tipizzati multidimensionalitable.unpack e argomenti variabiliRiepilogo: array e mappeEsercitati da solo: Compilatore Luau online