KAPITEL 17. SCHNELLEINSTIEG IN LUA
6
}
7
p r i n t ( # t r a n s l a t i o n s )
Lua berechnet in diesem Fall für jeden Schlüssel einen speziellen Hash Wert.
Dieser dient als Positionsindex des zugehörige Wertes in der Tabelle, d.h an
welcher Position der Wert abgelegt ist
für jeden beliebigen String eine einzigartige Nummer. Die Hash Zahl kann da-
bei jeden Wert der möglichen Strings annehmen. Im Beispiel oben ist keiner
der Hash Werte 1. Der allererste Index Eintrag in der translations Tabelle
ist daher nil und der Längen Operator stoppt bereits beim ersten Eintrag und
liefert uns 0.
Wenn Sie wirklich die Anzahl aller Einträge in einer nicht kontinuierlichen Tabel-
le benötigen, können Sie den Operator # nicht verwenden. Stattdessen müs-
sen Sie über alle Einträge iterieren. Wir werden dies im nächsten Abschnitt
erläutern. Merken Sie sich an dieser Stelle nur:
Verwenden Sie den # Operator bei Tabellen mit Vorsicht
Der # Operator arbeitet nur mit ein-dimensionalen Arrays (Tabellen oh-
ne speziellen Index). Vermeiden Sie den Längen Operator bei Tabellen
die evtl. Löcher enthalten!
Zum Glück ist dies nicht weiter tragisch weil Sie vermutlich nur sehr selten
die Anzahl der Einträge in einer nicht kontinuierlichen Tabelle bzw. 'Dictionary'
benötigen werden. Stattdessen greifen Sie auf die einzelnen Einträge über ihre
Schlüssel Indexe zu. Die Größe der Tabelle spielt dabei keine Rolle und Lua
kümmert sich selbst darum.
17.2.5.2
Tabellen Iteration
Sie können über den Inhalt einer numerischen (ein-dimensionalen und konti-
nuierlichen) Tabelle iterieren wie wir es bereits bei Strings vorgemacht haben.
1
f r u i t s = { " apple " , " banana " , " orange " , " pear " }
2
f o r i =1 ,# f r u i t s do
3
p r i n t ( f r u i t s [ i ] )
4
end
Dies funktioniert auch wenn Sie eine Index Zählung von 0 verwenden. Und
sogar wenn Sie die Einträge unsortiert vornehmen.
1
f r u i t s = {
2
[ 1 ] = " banana " ,
3
[ 2 ] = " orange " ,
4
[ 3 ] = " pear " ,
5
[ 0 ] = " apple " ,
6
}
f o r i =0 ,# f r u i t s do
7
8
p r i n t ( f r u i t s [ i ] )
end
9
Es ist lediglich wichtig, das die Indexe stetig und ohne Lücken sind. Das fol-
gende Beispiel funktioniert deshalb nicht!
5
Dies ist eine vereinfachte Darstellung, das Prinzip ist aber das gleiche!
208
> 0 ! ! !
5
. Ein perfekter Hash Algorithmus erzeugt
> apple banana orange pear
> apple banana orange pear