Herunterladen Inhalt Inhalt Diese Seite drucken
Inhaltsverzeichnis

Werbung

KAPITEL 17. SCHNELLEINSTIEG IN LUA
Wahrscheinlich ist Ihnen bereits aufgefallen, das die Ausgabe in unsortierter
Reihenfolge erfolgt. Auch wenn die Indexe von 2...5 eine sortierte Sequenz
anzeigen werden Sie intern dennoch als Eingabe für den Hash Algorithmus
verwendet. Und so wenig der resultierende Hash Wert dem ursprünglichen
Index Key (Schlüssel) entspricht so ist es die interne Ordnung in der Tabelle.
17.2.5.3

Tabellen sortieren

Wie wir gesehen haben können assoziative Tabellen in Lua nicht nach ihren
Schlüsseln bzw. Indexen sortiert werden. Aber Sie können eine zweite numeri-
sche (d.h. ein-dimensionalen) Tabelle erzeugen um die Schlüssel dort zu spei-
chern und zu sortieren. Anschließend iterieren Sie über diese zweite sortierte
Tabelle um auf die Schlüssel/Werte Paare der ersten zuzugreifen:
1
f r u i t s = {
2
[ 2 ] = " apple " ,
3
[ 3 ] = " banana " ,
4
[ 4 ] = " orange " ,
5
[ 5 ] = " pear " ,
6
}
7
a = { }
8
f o r i , v i n p a i r s ( f r u i t s ) do a [ # a +1] = i end
9
t a b l e . s o r t ( a )
10
f o r i , v i n i p a i r s ( a ) do p r i n t ( i , f r u i t s [ v ] ) end
Das Resultat ist nun:
2
apple
3
banana
4
orange
5
pear
Erklärung: Zeile 7 erzeugt eine neue leere Tabelle a in der wir die Indexe bzw.
Schlüssel (und nur diese) unserer fruits Tabelle speichern.
In Zeile 8 iterieren wir über fruits und fügen jeden Index (Schlüssel) am
Ende der Tabelle a an. Der Inhalt von a wird dadurch: {3,2,4,5} (siehe Aus-
gabe zuvor).
Tabelle a ist eine numerische ein-dimensionale Tabelle
bellen Funktion table.sort in Zeile 9 sortiert werden. Der Inhalt von a wird
dadurch zu {2,3,4,5}.
In Zeile 10 durchlaufen wir die sortierten Indexe um die zugehörigen Werte aus
fruits abzurufen und auszugeben.
Wir können diesen Code dazu benutzen unseren eigenen Sortier Iterator zu
schreiben. Diesen können wir dann immer verwenden, wenn wir einen sortier-
ten Tabellen Durchlauf benötigen. Der Iterator muss dazu lediglich bei jedem
neuen Aufruf das nächste in der Sortierreihenfolge vorliegende Schlüssel/Wer-
te Paar zurückgeben.
1
function s o r t e d P a i r s ( t )
2
l o c a l a = { }
3
f o r i i n p a i r s ( t ) do a [ # a + 1 ] = i end
4
t a b l e . s o r t ( a )
5
l o c a l i = 0
6
r e t u r n function ( )
6
Numerische Tabellen haben in Lua keinen 'Schlüssel' oder speziellen Index. Sie sind eine
kontinuierliche Liste von Einträgen und bilden dadurch ein ein-dimensionales Array.
210
6
und kann mit der Ta-

Werbung

Inhaltsverzeichnis
loading

Inhaltsverzeichnis