Benutzerdefiniertes Sortieren mit Funktionen
Teil des Abschnitts Logic & Flow 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.
Spickzettel
Um Tabellen mit komplexen Datenstrukturen zu sortieren, verwenden Sie eine benutzerdefinierte Vergleichsfunktion mit table.sort(). Die Vergleichsfunktion nimmt zwei Elemente entgegen und gibt true zurück, wenn das erste vor dem zweiten stehen sollte.
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)Dies sortiert die Spieler nach ihrer Punktzahl in absteigender Reihenfolge. Sie können nach jedem beliebigen Feld in der Tabellenstruktur sortieren.
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 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