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 cherrypairs: 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)
endElemente 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) -- 3Werte 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))
endSchlü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 = 8080Iteration ü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()
endFiltern 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 10Abbilden 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 WORLDpairs 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
-- zSchnelltest
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 nilpairs: alle Schlüssel, beliebige Reihenfolge, endet nie vorzeitig- Verwenden Sie
pairsfür Dictionaries undipairsfü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
- Tabellen als Arrays
- Tabellen als Wörterbücher
- Tabellen mit pairs und ipairs durchlaufen
- Verschachtelte Tabellen und strukturierte Daten