0Pricing
Lua Academy · Lezione

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, 6

filter: 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, 4

reduce: 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)  -- 15

Concatenare 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)  -- 220

forEach: 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

  1. table.sort con comparatori
  2. table.concat e table.move
  3. Copia profonda e copia superficiale
  4. Trasformazione delle tabelle: map, filter, reduce
← Torna a Lua Academy