0Pricing
Lua Academy · Lektion

Tabellen transformieren: map, filter, reduce

Erstellen Sie funktionale Funktionen höherer Ordnung zur Transformation von Tabellen

Tabellen transformieren: map, filter, reduce ist eine kostenlose Lua Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Lua Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.

Funktionale Muster in Lua

Lua verfügt über kein integriertes map/filter/reduce, doch diese Funktionen lassen sich mit Closures und generischen for-Schleifen leicht implementieren.

map: Jedes Element transformieren

map wendet eine Funktion auf jedes Element an und gibt eine neue Tabelle mit den Ergebnissen zurück.

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: Passende Elemente behalten

filter behält nur die Elemente, für die das Prädikat true zurückgibt.

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: Zu einem einzelnen Wert zusammenfassen

reduce kombiniert Elemente von links nach rechts mithilfe eines Akkumulators.

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

Operationen verketten

Verketten Sie map, filter und reduce zu ausdrucksstarken Datenpipelines.

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

Ein forEach durchläuft Elemente, ohne eine neue Tabelle zu erstellen – nützlich für Seiteneffekte wie die Ausgabe auf der Konsole.

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: Abbilden und anschließend abflachen

flatMap bildet jedes Element auf eine Liste ab und verkettet anschließend alle Listen.

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: Zwei Tabellen kombinieren

zip paart Elemente aus zwei Tabellen und erstellt daraus eine Tabelle mit Paaren.

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"})

Mit Wörterbuchtabellen arbeiten

Durchlaufen Sie Schlüssel-Wert-Tabellen mit pairs statt mit ipairs und sammeln Sie die Schlüssel-Wert-Paare.

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)

Konzept der verzögerten Auswertung

Erwägen Sie bei großen Datenmengen verzögerte Iteratoren (Closures, die jeweils ein Element liefern), um das Erstellen großer Zwischentabellen zu vermeiden.

Leistungshinweis

Jede Anwendung von map oder filter erstellt eine neue Tabelleninstanz. Für enge Schleifen kann eine direkte Änderung effizienter sein, allerdings auf Kosten der Unveränderlichkeit und Klarheit.

reduce-Frage

Was gibt reduce({1,2,3,4}, function(a,b) return a+b end, 0) zurück?

Zusammenfassung: map/filter/reduce

map transformiert, filter selektiert und reduce fasst zusammen. Diese drei Funktionen höherer Ordnung bilden die Grundlage der funktionalen Datenverarbeitung in Lua.

Häufig gestellte Fragen

Ist die Lektion „Tabellen transformieren: map, filter, reduce“ kostenlos?

Ja — der vollständige Text von „Tabellen transformieren: map, filter, reduce“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Lua Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Tabellen transformieren: map, filter, reduce“?

Erstellen Sie funktionale Funktionen höherer Ordnung zur Transformation von Tabellen Du übst Lua Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Lua Academy zu starten?

Keine Vorkenntnisse erforderlich. Lua Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.

Wie lange dauert die Lektion „Tabellen transformieren: map, filter, reduce“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Lua Academy-Lektion Code schreiben und ausführen?

Ja. Jede Lua Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. table.sort mit Vergleichsfunktionen
  2. table.concat und table.move
  3. Tiefe und flache Kopien
  4. Tabellen transformieren: map, filter, reduce
← Zurück zu Lua Academy