Benutzerdefiniertes Sortieren mit Funktionen
Teil des Abschnitts Logik & Programmablauf der Lua-Journey von Coddy — Lektion 8 von 54.
Während table.sort() hervorragend für einfache Listen von Zahlen oder Strings funktioniert, sind Daten aus der Praxis oft komplexer. Möglicherweise haben Sie eine Tabelle mit Spielerdatensätzen, Inventargegenständen oder Spielergebnissen, bei denen jeder Eintrag selbst eine Tabelle mit mehreren Feldern ist.
Um diese komplexen Strukturen zu sortieren, müssen Sie table.sort() genau sagen, wie zwei Einträge verglichen werden sollen. Hier werden benutzerdefinierte Vergleichsfunktionen unverzichtbar. Eine Vergleichsfunktion nimmt zwei Elemente entgegen und gibt true zurück, wenn das erste in der sortierten Reihenfolge vor dem zweiten stehen soll.
Hier ist ein Beispiel mit einer Tabelle von Spielerdatensätzen:
local players = {
{name = "Alice", score = 150},
{name = "Bob", score = 200},
{name = "Charlie", score = 175}
}
table.sort(players, function(a, b)
return a.score > b.score
end)Nach dem Sortieren wird die Tabelle players in absteigender Reihenfolge nach score sortiert, wobei Bob an erster Stelle steht (200), Charlie an zweiter (175) und Alice an dritter (150). Die Vergleichsfunktion greift auf das Feld score jeder player-Tabelle zu, um deren Reihenfolge zu bestimmen.
Sie können nach jedem beliebigen Feld sortieren – Namen alphabetisch, Level numerisch oder sogar mehrere Kriterien kombinieren.
Probier es selbst
Diese Lektion enthält keine Programmieraufgabe.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Programmablauf
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