Sortieren
Eine Liste in eine Reihenfolge zu bringen heißt sortieren, und Lua erledigt das mit table.sort für dich. Es sortiert Zahlen vom kleinsten zum größten:
local gewichte = {8, 12, 7, 15, 10}
table.sort(gewichte)
print(table.concat(gewichte, " "))Das gibt Folgendes aus:
7 8 10 12 15table.sort ändert die Liste selbst: Die Elemente wandern an neue Plätze. Es gibt nichts zurück, speichere also sein Ergebnis nicht. Nach local sortiert = table.sort(gewichte) ist sortiert gleich nil. Schreibe einfach table.sort(gewichte) in eine eigene Zeile und benutze weiter gewichte.
In einer sortierten Liste steht das kleinste Element vorn, gewichte[1], und das größte hinten, gewichte[#gewichte]. Das ist praktisch, aber die ursprüngliche Reihenfolge ist verloren. Wenn du wissen musst, wo ein Element war, zum Beispiel welcher Tag der beste war, nimm stattdessen die Schleife aus der vorigen Übung. Um die Elemente vom größten zum kleinsten zu bekommen, gehe die sortierte Liste rückwärts durch:
local gewichte = {8, 12, 7, 15, 10}
table.sort(gewichte)
for i = #gewichte, 1, -1 do
io.write(gewichte[i], " ")
end
print()Das gibt Folgendes aus:
15 12 10 8 7 table.sort kann auch direkt vom größten Element aus sortieren, aber dafür musst du ihm eine Funktion geben, die zwei Elemente vergleicht. Solche Funktionen schreibst du in der Lektion über Funktionen.
Auch Texte lassen sich sortieren, aber nicht ganz wie in einem Wörterbuch. Lua vergleicht sie Zeichen für Zeichen nach den Codes der Zeichen, und in diesen Codes kommen alle Großbuchstaben vor allen Kleinbuchstaben:
local pflanzen = {"kartoffel", "karotte", "Zucchini", "weizen", "mais"}
table.sort(pflanzen)
print(table.concat(pflanzen, ", "))Das gibt Folgendes aus:
Zucchini, karotte, kartoffel, mais, weizen"Zucchini" steht nur wegen seines großen Z vorn. Wenn du die Reihenfolge eines Wörterbuchs willst, schreibe alle Texte gleich, zum Beispiel alle klein. (In der Lektion über Zeichenketten lernst du, Großbuchstaben im Code in Kleinbuchstaben zu verwandeln.) Buchstaben mit Umlauten wie ä oder ü haben noch größere Codes, sie landen also nach dem z.
Zahlen, die als Texte geschrieben sind, werden als Texte sortiert, Zeichen für Zeichen: {"10", "9", "100"} wird zu "10", "100", "9", weil das Zeichen 1 vor 9 kommt. Halte Zahlen als Zahlen. Und eine Liste mit Zahlen und Texten lässt sich gar nicht sortieren, weil Lua eine Zahl nicht mit einem Text vergleichen kann:
local gemischt = {3, "Karotte"}
table.sort(gemischt)attempt to compare string with number
stack traceback:
[C]: in function 'table.sort'
main.lua:2: in main chunkDiese Meldung hat am Anfang kein main.lua: mit Zeilennummer, weil der Fehler innerhalb von table.sort passiert ist. Die Zeile deines Programms findest du im Traceback: main.lua:2: in main chunk.
So schreibst du es:
Anweisungen
- 1
Sortiere am Ende des Programms
gewichtemittable.sort. - 2
Gib die sortierten Gewichte mit
table.concataus, durch Leerzeichen getrennt:Sortiert: 7 8 9 10 12 15. - 3
Gib die drei schwersten Kürbisse aus, beginnend mit dem schwersten. Gehe das Ende der sortierten Liste rückwärts durch:
Top 3: 15 12 10. - 4
Sortiere auch
pflanzenund gib sie aus:Pflanzen:gefolgt vontable.concat(pflanzen, ", ").Zucchinisteht wegen seines Großbuchstabens zuerst. Korrigiere die Liste am Anfang des Programms, sodass die Pflanzen in alphabetischer Reihenfolge stehen:Pflanzen: karotte, kartoffel, mais, weizen, zucchini.