Menu
Coddy logo textTech

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.

challenge icon

Aufgabe

Einfach

Schreiben 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
end

Verwenden 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
end

Beispiel 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äge

Probier es selbst

function countSequentialItems(data)
    -- Code hier schreiben
end
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logic & Flow