Iterieren mit ipairs()
Teil des Abschnitts Logic & Flow der Lua-Journey von Coddy — Lektion 2 von 54.
Während pairs() mit jeder Tabellenstruktur funktioniert, bietet Lua eine spezialisierte Funktion namens ipairs() an, die speziell für Tabellen im Listenstil entwickelt wurde. Diese Funktion iteriert in sequenzieller Reihenfolge durch Tabellen, beginnend bei Index 1 und fortfahrend, bis sie auf einen nil-Wert stößt.
Die Syntax für ipairs() ähnelt der von pairs():
for index, value in ipairs(myList) do
-- index und value hier verwenden
endHier ist ein Beispiel mit einer Liste von Quest-Gegenständen:
local questItems = {"Map", "Compass", "Torch", "Rope"}
for i, item in ipairs(questItems) do
print(i .. ". " .. item)
endAusgabe:
1. Map
2. Compass
3. Torch
4. RopeDer entscheidende Unterschied zu pairs() besteht darin, dass ipairs() sofort stoppt, wenn es einen nil-Wert findet, selbst wenn danach noch weitere Elemente folgen.
Aufgabe
EinfachSchreibe eine Funktion listTasks, die eine tasks-Tabelle entgegennimmt und einen formatierten String zurückgibt, der alle Aufgaben mit ihren Positionsnummern auflistet.
Verwende ipairs(), um die Aufgaben in sequenzieller Reihenfolge zu durchlaufen und einen String zu erstellen, bei dem jede Zeile die Aufgabennummer gefolgt vom Aufgabennamen im Format number. task zeigt. Jede Aufgabe sollte in einer separaten Zeile stehen.
Parameter:
tasks(table): Eine tabellenartige Liste, die Aufgabennamen als Strings enthält
Rückgabewert: Ein String, bei dem jede Aufgabe in einer separaten Zeile nummeriert ist. Format:
1. task1
2. task2
3. task3Spickzettel
ipairs() iteriert durch Tabellen im Listenstil in sequenzieller Reihenfolge, beginnend bei Index 1 und stoppt beim ersten nil-Wert:
for index, value in ipairs(myList) do
-- index und value hier verwenden
endBeispiel:
local questItems = {"Map", "Compass", "Torch", "Rope"}
for i, item in ipairs(questItems) do
print(i .. ". " .. item)
end
-- Ausgabe:
-- 1. Map
-- 2. Compass
-- 3. Torch
-- 4. RopeWichtiger Unterschied: Im Gegensatz zu pairs() stoppt ipairs() sofort, wenn es auf einen nil-Wert stößt, selbst wenn danach weitere Elemente existieren.
Probier es selbst
function listTasks(tasks)
-- Schreibe hier den Code
end
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logic & Flow
1Fortgeschrittene Table-Iteration
Iterieren mit pairs()Iterieren mit ipairs()pairs() vs. ipairs()Zusammenfassung – Charakterbogen4Einführung in Metatables
Was ist eine Metatable?setmetatable & getmetatableDie __index-MetamethodeDie __newindex-MetamethodeDie __tostring-MetamethodeArithmetische Metamethoden Teil 1Arithmetische Metamethoden Teil 2Zusammenfassung – Schreibgeschützte Tabellen7Fortgeschrittene String-Manipulation
string.gsub() für ErsetzungenEinführung in String-Patternsstring.find()string.match()Iterieren mit string.gmatch()Rückblick – Log-File-Parser2Weitere Funktionen der Table-Bibliothek
table.concat()Tabellenerstellung & unpack()table.sort()Benutzerdefiniertes Sortieren mit FunktionenRückblick – Highscore-Tabelle