0Pricing
Lua Academy · Lektion

Tabellen mit pairs und ipairs durchlaufen

Durchlaufen Sie Tabellen sicher mit pairs() und ipairs()

Tabellen mit pairs und ipairs durchlaufen ist eine kostenlose Lua Academy-Lektion auf CoddyKit. Dies ist Lektion 3 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.

ipairs: Geordnete Array-Iteration

ipairs(t) iteriert über die bei Index 1 beginnende Folge von Ganzzahlen und liefert Paare aus (index, value). Die Iteration endet beim ersten nil. Für arrayähnliche Tabellen, bei denen die Reihenfolge wichtig ist, ist dies die sichere und vorhersehbare Wahl.

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

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

pairs: Alle Schlüssel

pairs(t) iteriert über jedes Schlüssel-Wert-Paar der Tabelle, dessen Schlüssel nicht nil ist, und zwar in nicht spezifizierter Reihenfolge. Intern verwendet es die Funktion next(). Verwenden Sie pairs für Dictionaries, gemischte Tabellen oder wenn Sie alle Schlüssel unabhängig von ihrem Typ besuchen müssen.

local info = {name="Lua", version=5.4, embedded=true}

for k, v in pairs(info) do
  print(k, v)
end
-- name  Lua
-- version  5.4
-- embedded  true  (order may vary)

Zwischen pairs und ipairs wählen

Verwenden Sie ipairs für sequenzielle Arrays (garantierte Reihenfolge, endet bei nil). Verwenden Sie pairs für Dictionaries, gemischte Tabellen oder wenn Sie alle Schlüssel benötigen. pairs für ein Array funktioniert, garantiert jedoch keine Reihenfolge. ipairs für ein Dictionary ignoriert Schlüssel, die keine Ganzzahlen sind.

local mixed = {10, 20, label="hello", 30}

-- ipairs: only sees 10, 20, 30 in order
for i, v in ipairs(mixed) do
  io.write(v .. " ")
end
print()  -- 10 20 30

-- pairs: sees everything
for k, v in pairs(mixed) do
  print(k, v)
end

Elemente zählen

Für Sequenzen liefert #t die Anzahl der Elemente. Für Dictionaries ist #t unzuverlässig – iterieren Sie mit pairs und zählen Sie manuell. Diese wichtige Unterscheidung verhindert Fehler beim Arbeiten mit gemischten Tabellen oder Tabellen mit String-Schlüsseln.

local arr = {10, 20, 30}
print("#arr:", #arr)        -- 3 (reliable)

local dict = {a=1, b=2, c=3}
print("#dict:", #dict)      -- 0 (unreliable for dicts!)

local count = 0
for _ in pairs(dict) do count = count + 1 end
print("count:", count)       -- 3

Werte während der Iteration ändern

Sie können den Wert eines vorhandenen Schlüssels sicher aktualisieren, während Sie mit pairs iterieren. Das Hinzufügen oder Entfernen von Schlüsseln während der Iteration führt dagegen zu undefiniertem Verhalten. Sammeln Sie Änderungen und wenden Sie sie nach der Schleife an.

local prices = {apple=1.0, banana=0.5, cherry=2.0}

-- Safe: update existing values
for k, v in pairs(prices) do
  prices[k] = v * 1.1  -- 10% markup
end

for k, v in pairs(prices) do
  print(k, string.format("%.2f", v))
end

Schlüssel sammeln

Eine häufige Operation besteht darin, alle Schlüssel für eine deterministische Ausgabe in einem sortierten Array zu sammeln. Iterieren Sie mit pairs, um die Schlüssel zusammenzutragen, und verwenden Sie anschließend table.sort, um sie zu ordnen.

local config = {host="localhost", port=8080, debug=true}
local keys = {}

for k in pairs(config) do
  keys[#keys+1] = k
end
table.sort(keys)

for _, k in ipairs(keys) do
  print(k, "=", config[k])
end
-- debug = true
-- host = localhost
-- port = 8080

Iteration über verschachtelte Tabellen

Bei verschachtelten Tabellen (Tabellen aus Tabellen) kombinieren Sie zwei Schleifen: Die äußere Schleife iteriert über die oberste Ebene, die innere über jede verschachtelte Tabelle. Mit Rekursion lässt sich dieses Muster auf beliebige Verschachtelungstiefen erweitern.

local matrix = {
  {1,2,3},
  {4,5,6},
  {7,8,9},
}

for i, row in ipairs(matrix) do
  for j, val in ipairs(row) do
    io.write(string.format("%3d", val))
  end
  print()
end

Filtern mit ipairs

Erstellen Sie eine gefilterte Liste, indem Sie mit ipairs iterieren und die Elemente anhängen, die ein Prädikat erfüllen. Das Ergebnis ist ein neues Array, das nur die passenden Elemente enthält.

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 nums = {1,2,3,4,5,6,7,8,9,10}
local evens = filter(nums, function(n) return n % 2 == 0 end)
print(table.concat(evens, " "))  -- 2 4 6 8 10

Abbilden mit ipairs

Wenden Sie eine Transformation auf jedes Element an: Iterieren Sie und erstellen Sie ein neues Array mit den transformierten Werten. Dies entspricht in Lua map() in funktionalen Programmiersprachen.

local function map(t, fn)
  local result = {}
  for i, v in ipairs(t) do
    result[i] = fn(v)
  end
  return result
end

local nums = {1, 2, 3, 4, 5}
local doubled = map(nums, function(n) return n * 2 end)
print(table.concat(doubled, " "))  -- 2 4 6 8 10

local words = {"hello","world"}
local upper = map(words, string.upper)
print(table.concat(upper, " "))    -- HELLO WORLD

pairs für benutzerdefinierte Iteratoren

Sie können ein benutzerdefiniertes Objekt iterierbar machen, indem Sie eine Funktion einen Iterator und einen Zustand zurückgeben lassen. Dieses Muster entspricht der internen Funktionsweise von pairs: Es gibt next, t, nil zurück. Ihre Iteratorfabrik gibt auf ähnliche Weise eine Funktion sowie optional einen Zustand zurück.

local function values(t)
  local i = 0
  return function()
    i = i + 1
    return t[i]
  end
end

for v in values({"x","y","z"}) do
  print(v)
end
-- x
-- y
-- z

Schnelltest

Welche Aussage über pairs() im Vergleich zu ipairs() trifft zu?

Rückblick: pairs und ipairs

Zusammenfassung:

  • ipairs: geordnet, ganzzahlige Schlüssel ab 1, endet bei nil
  • pairs: alle Schlüssel, beliebige Reihenfolge, endet nie vorzeitig
  • Verwenden Sie pairs für Dictionaries und ipairs für Arrays
  • Fügen Sie niemals während einer pairs-Iteration Schlüssel hinzu oder entfernen Sie welche; das Aktualisieren vorhandener Werte ist sicher
  • Sammeln und sortieren Sie Schlüssel für eine deterministische Ausgabe

Häufig gestellte Fragen

Ist die Lektion „Tabellen mit pairs und ipairs durchlaufen“ kostenlos?

Ja — der vollständige Text von „Tabellen mit pairs und ipairs durchlaufen“ 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 mit pairs und ipairs durchlaufen“?

Durchlaufen Sie Tabellen sicher mit pairs() und ipairs() 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 3 von 4.

Wie lange dauert die Lektion „Tabellen mit pairs und ipairs durchlaufen“?

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. Tabellen als Arrays
  2. Tabellen als Wörterbücher
  3. Tabellen mit pairs und ipairs durchlaufen
  4. Verschachtelte Tabellen und strukturierte Daten
← Zurück zu Lua Academy