Trasformazione delle tabelle: map, filter, reduce
Costruisca helper funzionali di ordine superiore per trasformare le tabelle.
Trasformazione delle tabelle: map, filter, reduce è una lezione Lua Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Lua Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Lua Academy include 4 lezioni in totale.
Schemi funzionali in Lua
Lua non include map/filter/reduce integrati, ma sono semplici da implementare utilizzando closure e cicli for generici.
map: trasformare ogni elemento
map applica una funzione a ogni elemento e restituisce una nuova tabella di risultati.
local function map(t, fn)
local result = {}
for i, v in ipairs(t) do result[i] = fn(v) end
return result
end
local doubled = map({1,2,3}, function(x) return x * 2 end)
print(table.concat(doubled, ", ")) -- 2, 4, 6filter: mantenere gli elementi corrispondenti
filter mantiene solo gli elementi per i quali il predicato restituisce true.
local function filter(t, pred)
local result = {}
for _, v in ipairs(t) do
if pred(v) then result[#result+1] = v end
end
return result
end
local evens = filter({1,2,3,4,5}, function(x) return x % 2 == 0 end)
print(table.concat(evens, ", ")) -- 2, 4reduce: ridurre a un singolo valore
reduce combina gli elementi da sinistra a destra utilizzando un accumulatore.
local function reduce(t, fn, init)
local acc = init
for _, v in ipairs(t) do acc = fn(acc, v) end
return acc
end
local sum = reduce({1,2,3,4,5}, function(a,b) return a+b end, 0)
print(sum) -- 15Concatenare le operazioni
Concateni map, filter e reduce per creare pipeline di dati espressive.
local nums = {1,2,3,4,5,6,7,8,9,10}
local result = reduce(
map(
filter(nums, function(x) return x % 2 == 0 end),
function(x) return x * x end
),
function(a,b) return a + b end, 0
)
print(result) -- 220forEach: effetti collaterali
forEach esegue un'iterazione senza creare una nuova tabella; è utile per effetti collaterali come la stampa.
local function forEach(t, fn)
for i, v in ipairs(t) do fn(v, i) end
end
forEach({"a","b","c"}, function(v, i) print(i, v) end)flatMap: mappare e poi appiattire
flatMap associa ogni elemento a una lista e poi concatena tutte le liste.
local function flatMap(t, fn)
local result = {}
for _, v in ipairs(t) do
for _, item in ipairs(fn(v)) do
result[#result+1] = item
end
end
return result
end
local expanded = flatMap({1,2,3}, function(x) return {x, x*10} end)zip: combinare due tabelle
zip associa gli elementi di due tabelle creando una tabella di coppie.
local function zip(a, b)
local result = {}
for i = 1, math.min(#a, #b) do
result[i] = {a[i], b[i]}
end
return result
end
local zipped = zip({1,2,3}, {"a","b","c"})Lavorare con tabelle dizionario
Per le tabelle chiave-valore, esegua l'iterazione con pairs invece di ipairs e raccolga le coppie chiave-valore.
local function mapValues(t, fn)
local result = {}
for k, v in pairs(t) do result[k] = fn(v) end
return result
end
local doubled = mapValues({x=1,y=2}, function(v) return v*2 end)Concetto di valutazione lazy
Per dataset di grandi dimensioni, valuti iteratori lazy (closure che producono un elemento alla volta) per evitare di creare grandi tabelle intermedie.
Nota sulle prestazioni
Ogni map/filter crea una nuova allocazione di tabella. Nei cicli molto intensivi, la modifica sul posto può essere più efficiente, ma sacrifica l'immutabilità e la chiarezza.
Domanda su reduce
Che cosa restituisce reduce({1,2,3,4}, function(a,b) return a+b end, 0)?
Riepilogo: map/filter/reduce
map trasforma, filter seleziona e reduce riduce. Queste tre funzioni di ordine superiore costituiscono la base dell'elaborazione funzionale dei dati in Lua.
Domande Frequenti
La lezione «Trasformazione delle tabelle: map, filter, reduce» è gratuita?
Sì — il testo completo di «Trasformazione delle tabelle: map, filter, reduce» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Lua Academy, passa a CoddyKit PRO. Il corso Lua Academy include 4 lezioni in totale.
Cosa imparerò in «Trasformazione delle tabelle: map, filter, reduce»?
Costruisca helper funzionali di ordine superiore per trasformare le tabelle. Eserciti Lua Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Lua Academy?
Non è richiesta alcuna esperienza precedente. Lua Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.
Quanto tempo richiede la lezione «Trasformazione delle tabelle: map, filter, reduce»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Lua Academy?
Sì. Ogni lezione Lua Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- table.sort con comparatori
- table.concat e table.move
- Copia profonda e copia superficiale
- Trasformazione delle tabelle: map, filter, reduce