Lua Academy · Lektion

Generische for-Schleife und break

Verwenden Sie generische for-Schleifen mit pairs/ipairs und steuern Sie den Schleifenablauf mit break

Lektion 4 von 412 Schritte

Generische for-Schleife und break 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.

Protokoll der generischen for-Schleife

Luas generische for-Schleife arbeitet mit einer Iteratorfunktion. Die Syntax lautet for vars in iter_func, state, init do. Bei jeder Iteration ruft Lua iter_func(state, lastVar) auf und weist die Rückgabewerte den Variablen vars zu. Die Schleife endet, wenn der erste Rückgabewert nil ist.

-- Manual use of next() iterator
local t = {a=1, b=2, c=3}
local key, val = next(t, nil)   -- first entry
while key ~= nil do
  print(key, val)
  key, val = next(t, key)       -- advance
end

pairs() für alle Schlüssel

pairs(t) gibt einen Iterator zurück, der alle Schlüssel-Wert-Paare einer Tabelle durchläuft, einschließlich String-Schlüsseln, Ganzzahlschlüsseln und gemischten Schlüsseln. Die Reihenfolge für Schlüssel, die keine Ganzzahlen sind, ist nicht festgelegt (Hash-Reihenfolge). Sowohl der Array- als auch der Hash-Teil werden berücksichtigt.

local config = {
  host = "localhost",
  port = 8080,
  debug = true,
  [1] = "first",
}

for key, value in pairs(config) do
  print(key, value)
end
-- Prints all 4 entries in any order

ipairs() für Array-Schlüssel

ipairs(t) durchläuft Ganzzahlschlüssel ab 1 und endet beim ersten nil-Wert. Die Funktion ist sicher, vorhersehbar und erhält die Reihenfolge. Verwenden Sie ipairs für arrayähnliche Tabellen, wenn die Reihenfolge wichtig ist und Sie beim ersten Loch stoppen möchten.

local fruits = {"apple", "banana", "cherry"}

for i, fruit in ipairs(fruits) do
  print(i, fruit)
end
-- 1  apple
-- 2  banana
-- 3  cherry

-- stops at first nil
local t = {10, 20, nil, 40}
for i, v in ipairs(t) do
  print(i, v)  -- only 1,10 and 2,20
end

pairs und ipairs im Vergleich

Sie sollten wissen, wann welches Verfahren geeignet ist: ipairs ist für geordnete, fortlaufende Arrays gedacht, pairs für Wörterbücher oder gemischte Tabellen. ipairs stoppt beim ersten nil-Loch, pairs besucht jeden Schlüssel mit einem Wert. Für reine Arrays ist ipairs idiomatischer.

local mixed = {10, 20, key="val", 30}

-- ipairs only sees array part in order
print("ipairs:")
for i, v in ipairs(mixed) do
  print(i, v)  -- 1:10, 2:20, 3:30
end

-- pairs sees everything
print("pairs:")
for k, v in pairs(mixed) do
  print(k, v)  -- 1:10, 2:20, 3:30, key:val
end

Benutzerdefinierter Iterator mit Closure

Sie können Ihren eigenen Iterator als Closure schreiben. Die Factory-Funktion gibt eine zustandsbehaftete Closure zurück, die ihre Position bei jedem Aufruf weiterführt. Wenn keine Werte mehr vorhanden sind, gibt sie nil zurück und beendet damit die generische for-Schleife.

local function range(from, to, step)
  step = step or 1
  local i = from - step
  return function()
    i = i + step
    if i <= to then return i end
  end
end

for n in range(1, 10, 2) do
  io.write(n .. " ")
end
print()  -- 1 3 5 7 9

string.gmatch als Iterator

string.gmatch(s, pattern) gibt einen Iterator über alle Vorkommen des Musters im String s zurück. Die Funktion wird häufig verwendet, um Strings zu teilen, Tokens zu extrahieren oder alle Vorkommen eines Musters zu finden.

local sentence = "the quick brown fox"

for word in string.gmatch(sentence, "%a+") do
  print(word)
end
-- the
-- quick
-- brown
-- fox

break in generischen for-Schleifen

Sie können eine generische for-Schleife mit break vorzeitig verlassen. Das ist für die Suche nützlich: Iterieren Sie, bis eine Übereinstimmung gefunden wurde, und verwenden Sie dann break. Nach dem Verlassen wird die Ausführung mit der Anweisung nach end fortgesetzt.

local inventory = {
  {name="sword", damage=50},
  {name="shield", armor=30},
  {name="bow", damage=35},
}

local target = "shield"
for i, item in ipairs(inventory) do
  if item.name == target then
    print("Found at index", i)
    break
  end
end

Tabellen während der Iteration ändern

Fügen Sie niemals Schlüssel in eine Tabelle ein und entfernen Sie niemals Schlüssel daraus, während Sie mit pairs() iterieren – das Verhalten ist undefiniert (manche Änderungen werden möglicherweise erkannt, andere übersprungen). Wenn Sie eine Tabelle ändern müssen, sammeln Sie die Änderungen in einer temporären Liste und wenden Sie sie nach der Schleife an.

local t = {a=1, b=2, c=3, d=4}
local toDelete = {}

-- Collect keys to delete
for k, v in pairs(t) do
  if v % 2 == 0 then
    toDelete[#toDelete+1] = k
  end
end

-- Delete after iteration
for _, k in ipairs(toDelete) do
  t[k] = nil
end
-- t = {a=1, c=3}

Enumerationsmuster

Wenn Sie sowohl den Index als auch den Wert benötigen, verwenden Sie ipairs, das beides bereitstellt. Wenn Sie nur die Werte benötigen und der Index keine Rolle spielt, können Sie _ als üblichen Variablennamen für „nicht relevant“ verwenden.

local colors = {"red", "green", "blue"}

-- With index
for i, color in ipairs(colors) do
  print(i .. ": " .. color)
end

-- Ignore index with _
for _, color in ipairs(colors) do
  print(color)  -- just the values
end

next() direkt verwenden

next(t, key) ist die zugrunde liegende Traversierungsfunktion. Sie gibt das Schlüssel-Wert-Paar nach key zurück oder nil, wenn keine weiteren Einträge vorhanden sind. next(t, nil) gibt den ersten Eintrag zurück. Mit next(t) ~= nil können Sie prüfen, ob eine Tabelle nicht leer ist – schneller als das Zählen.

local function isEmpty(t)
  return next(t) == nil
end

print(isEmpty({}))       -- true
print(isEmpty({1,2,3}))  -- false
print(isEmpty({a=1}))    -- false

Kurztest

Welcher Iterator stoppt beim ersten nil-Loch in einer Tabelle?

Zusammenfassung: Generische for-Schleifen und break

Zusammenfassung:

  • pairs(t) – alle Schlüssel, beliebige Reihenfolge
  • ipairs(t) – Ganzzahlschlüssel 1..n, geordnet, stoppt bei nil
  • Benutzerdefinierte Iteratoren: Eine Closure zurückgeben, die zum Beenden nil zurückgibt
  • break beendet die Schleife vorzeitig
  • Ändern Sie eine Tabelle niemals während einer pairs-Iteration; sammeln Sie Änderungen und wenden Sie sie danach an
  • next(t) == nil – schnelle Prüfung auf eine leere Tabelle
Kostenlos starten

Lerne Lua mit einem KI-Tutor — kostenlos

Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.

Kurse
40
Lektionen
159

Häufig gestellte Fragen

Ist die Lektion „Generische for-Schleife und break“ kostenlos?

Ja — der vollständige Text von „Generische for-Schleife und break“ 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 „Generische for-Schleife und break“?

Verwenden Sie generische for-Schleifen mit pairs/ipairs und steuern Sie den Schleifenablauf mit break 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 „Generische for-Schleife und break“?

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. if-, elseif- und else-Anweisungen
  2. while- und repeat-until-Schleifen
  3. Numerische for-Schleife
  4. Generische for-Schleife und break
← Zurück zu Lua Academy