pairs() vs. ipairs()
Teil des Abschnitts Logic & Flow der Lua-Journey von Coddy — Lektion 3 von 54.
Nachdem du nun sowohl pairs() als auch ipairs() kennengelernt hast, ist es wichtig zu verstehen, wann man welche Funktion verwendet. Die Wahl hängt ganz von der Struktur deiner Tabelle ab und davon, was du erreichen möchtest.
Verwenden Sie ipairs(), wenn Sie eine Tabelle im Listenstil mit sequenziellen Ganzzahlschlüsseln haben, die bei 1 beginnen. Es verarbeitet Elemente der Reihe nach und stoppt beim ersten nil-Wert, was es ideal für Arrays macht, bei denen die Reihenfolge eine Rolle spielt.
Verwenden Sie pairs(), wenn Ihre Tabelle String-Schlüssel, gemischte Schlüsseltypen hat oder wenn Sie auf alle Einträge zugreifen müssen, unabhängig von Lücken. Es iteriert durch jedes Schlüssel-Wert-Paar in der Tabelle ohne eine bestimmte Reihenfolge.
Betrachten Sie diese gemischte Tabelle:
local gameData = {
"Level 1",
"Level 2",
"Level 3",
currentLevel = 2,
playerName = "Hero"
}Wenn Sie ipairs() verwenden, werden Sie nur die drei Level-Strings sehen. Wenn Sie pairs() verwenden, werden Sie alle fünf Einträge sehen, einschließlich der String-Schlüssel.
Aufgabe
EinfachSchreiben Sie eine Funktion countSequentialItems, die eine data-Tabelle entgegennimmt und die Anzahl der sequenziellen, ganzzahlig indizierten Elemente zurückgibt.
Verwenden Sie ipairs(), um zu zählen, wie viele Elemente im sequenziellen Teil der Tabelle vorhanden sind (beginnend bei Index 1 bis zum ersten nil). Dies wird Ihnen helfen, den Unterschied zwischen ipairs() und pairs() bei der Arbeit mit gemischten Tabellen zu verstehen.
Parameter:
data(table): Eine gemischte Tabelle, die sowohl sequenzielle Ganzzahlschlüssel als auch Zeichenfolgenschlüssel enthält
Rückgabewert: Die Anzahl der sequenziellen Elemente (number)
Spickzettel
Verwenden Sie ipairs() für Tabellen im Listenstil mit sequenziellen Ganzzahlschlüsseln ab 1. Es verarbeitet Elemente der Reihe nach und stoppt beim ersten nil-Wert:
for i, value in ipairs(myList) do
-- verarbeitet nur sequenzielle Elemente
endVerwenden Sie pairs() für Tabellen mit Zeichenfolgenschlüsseln, gemischten Schlüsseltypen oder wenn Sie auf alle Einträge unabhängig von Lücken zugreifen müssen. Es iteriert ohne bestimmte Reihenfolge durch jedes Schlüssel-Wert-Paar:
for key, value in pairs(myTable) do
-- verarbeitet alle Schlüssel-Wert-Paare
endBeispiel mit einer gemischten Tabelle:
local gameData = {
"Level 1",
"Level 2",
"Level 3",
currentLevel = 2,
playerName = "Hero"
}
-- ipairs() sieht nur: "Level 1", "Level 2", "Level 3"
-- pairs() sieht alle fünf EinträgeProbier es selbst
function countSequentialItems(data)
-- Code hier schreiben
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