Menu
Coddy logo textTech

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.

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