scripting:tutorials:level1:tables
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Nächste Überarbeitung | Vorherige Überarbeitung | ||
scripting:tutorials:level1:tables [2023/05/28 15:41] – angelegt fritz_98 | scripting:tutorials:level1:tables [2024/05/13 13:26] (aktuell) – fritz_98 | ||
---|---|---|---|
Zeile 41: | Zeile 41: | ||
</ | </ | ||
+ | Tables, die wie Listen funktionieren, | ||
---- | ---- | ||
Zeile 55: | Zeile 56: | ||
---- | ---- | ||
- | **Hinweis**: | + | **Hinweis**: |
+ | |||
+ | \\ | ||
+ | |||
+ | ==== Nutzung von Schleifen ==== | ||
Vielleicht hast du schon bemerkt, dass es sich anbietet, Schleifen zu verwenden, wenn man mehrere Einträge eines Tables braucht. Mit einer **for**-Schleife kann die Zählvariable dazu benutzt werden, die Table-Einträge nacheinander zu **referenzieren**: | Vielleicht hast du schon bemerkt, dass es sich anbietet, Schleifen zu verwenden, wenn man mehrere Einträge eines Tables braucht. Mit einer **for**-Schleife kann die Zählvariable dazu benutzt werden, die Table-Einträge nacheinander zu **referenzieren**: | ||
Zeile 68: | Zeile 73: | ||
Es gibt Umstände, unter denen du nicht weißt, wie groß ein Table ist. Es gibt Funktionen, die Listen variierender Größe als Rückgabewert haben. Da so ein Fall sehr oft eintritt, wollen wir eine sehr wichtige Funktion vorwegnehmen: | Es gibt Umstände, unter denen du nicht weißt, wie groß ein Table ist. Es gibt Funktionen, die Listen variierender Größe als Rückgabewert haben. Da so ein Fall sehr oft eintritt, wollen wir eine sehr wichtige Funktion vorwegnehmen: | ||
'' | '' | ||
- | Damit kann die Größe bzw. Länge einer Liste ermittelt werden. Dabei gibt es eine Einschränkung: | + | Damit kann die Größe bzw. Länge einer Liste ermittelt werden. Dabei gibt es eine Einschränkung: |
Das gleiche Beispiel kann nun unter Verwendung von '' | Das gleiche Beispiel kann nun unter Verwendung von '' | ||
Zeile 106: | Zeile 111: | ||
MyTable = {5, 8, 27, 11, 90, 3, 82} | MyTable = {5, 8, 27, 11, 90, 3, 82} | ||
MyTableSum = SumOfList(MyTable) | MyTableSum = SumOfList(MyTable) | ||
+ | </ | ||
+ | |||
+ | \\ | ||
+ | |||
+ | ==== Eine Liste verändern ==== | ||
+ | |||
+ | Konsequenterweise können wir über '' | ||
+ | <code lua> | ||
+ | MyTable = {42, "Hallo Welt", true} | ||
+ | |||
+ | -- Schreibe an die zweite Stelle der Liste einen anderen Wert | ||
+ | MyTable[2] = "Welt, seid mir gegrüßt" | ||
</ | </ | ||
- | FIXME Tables | + | Auf diese Art und Weise kann ein Table auch nachträglich vergrößert werden, indem man einen Index benutzt, der die Listengröße um 1 erhöht: |
+ | |||
+ | <code lua> | ||
+ | MyTable = {42, "Hallo Welt", true} | ||
+ | |||
+ | -- Schreibe an die vierte Stelle der Liste einen neuen Wert | ||
+ | MyTable[4] = "Neuer Wert" | ||
+ | </ | ||
+ | |||
+ | In einer Schleife können so beliebig große Listen erschaffen werden. In folgendem Beispiel erstellen wir ein Table, in dem die ersten paar Zahlen der [[ https:// | ||
+ | <code lua> | ||
+ | function GetFibonacci(_Length) | ||
+ | -- Falls man nur an höchstens einer Fibonacci-Zahl interessiert ist, brauchen | ||
+ | -- wir nicht groß zu rechnen | ||
+ | if _Length == 0 then | ||
+ | return {} | ||
+ | elseif _Length == 1 then | ||
+ | return {0} | ||
+ | end | ||
+ | |||
+ | -- Initialisiere die Liste mit den ersten beiden Einträgen | ||
+ | local FibonacciList = {0, 1} | ||
+ | -- Die Schleife startet bei 3, denn die ersten beiden Einträge haben wir schon | ||
+ | for i = 3, _Length do | ||
+ | -- Wir greifen hier auf die Indizes | ||
+ | -- Wenn man auf diese Weise mit Indizes rechnet, muss man immer sicherstellen, | ||
+ | -- dass man nicht " | ||
+ | -- Dadurch, dass wir mit zwei Elementen in der Liste beginnen, klappt | ||
+ | -- hier immer | ||
+ | FibonacciList[i] = FibonacciList[i-2] + FibonacciList[i-1] | ||
+ | end | ||
+ | |||
+ | return FibonacciList | ||
+ | end | ||
+ | |||
+ | MyFibonacci = GetFibonacci(10) | ||
+ | |||
+ | -- Wir überlassen es dem Leser, die Liste MyFibonacci mit print komplett anzeigen zu lassen | ||
+ | -- Eine Schleife und table.getn | ||
+ | </ | ||
+ | |||
+ | **Achtung**: | ||
+ | <code lua> | ||
+ | MyTable = {6, 18} | ||
+ | |||
+ | -- Hier wird ein Wert an Stelle 4 geschrieben, | ||
+ | MyTable[4] = 24 | ||
+ | |||
+ | -- Als Table-Länge wird 2 angezeigt werden, weil danach ein " | ||
+ | Message(table.getn(MyTable)) | ||
+ | |||
+ | -- Wenn wir dieses " | ||
+ | MyTable[3] = 1 | ||
+ | |||
+ | -- wird die Table-Länge 4 angezeigt werden | ||
+ | Message(table.getn(MyTable)) | ||
+ | </ | ||
---- | ---- | ||
===== Tables als Wörterbücher ===== | ===== Tables als Wörterbücher ===== | ||
+ | |||
+ | Die andere Art von Tables sind solche, die **Paare** von Variablen einander zuordnet. Wie in einem Wörterbuch kann man in so einem Table für einen gesuchten Wert (Fremdwort, **Schlüsselwert**/ | ||
+ | |||
+ | Dazwischen stehen dann die Werte-Paare. Der Schlüsselwert/ | ||
+ | <code lua> | ||
+ | Dictionary = { | ||
+ | [" | ||
+ | [" | ||
+ | [" | ||
+ | [" | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Will man nun wissen, welches deutsche Wort einem englischen entspricht, kann man sich den Wert wie bei den Listen oben mit eckigen Klammern holen: | ||
+ | |||
+ | <code lua> | ||
+ | -- Was bedeutet Keyboard? | ||
+ | print(" | ||
+ | </ | ||
+ | |||
+ | Natürlich kann man nicht nur Strings einander zuordnen: | ||
+ | <code lua> | ||
+ | NumberNames = { | ||
+ | [1] = " | ||
+ | [2] = " | ||
+ | [3] = " | ||
+ | [4] = " | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Der Name einer Zahl lässt sich dann mit '' | ||
+ | |||
+ | <code lua> | ||
+ | NumberNames = {" | ||
+ | </ | ||
+ | |||
+ | Es gibt für Tables eine weitere abkürzende Schreibweise, | ||
+ | <code lua> | ||
+ | -- Dieses kleine Wörterbuch ist genau das gleiche wie oben in einer anderen Schreibweise | ||
+ | Dictionary = { | ||
+ | Computer = " | ||
+ | Mouse = " | ||
+ | Keyboard = " | ||
+ | Screen = " | ||
+ | } | ||
+ | </ | ||
+ | **Wichtig**: | ||
+ | |||
+ | Die gleiche Vereinfachung existiert auch, wenn man den Wert anhand des Keys wieder referenzieren möchte: | ||
+ | <code lua> | ||
+ | -- Was bedeutet Keyboard? | ||
+ | print(" | ||
+ | </ | ||
+ | Der String-Key wird also mit einem Punkt vom Table-Name getrennt. | ||
+ | |||
+ | **Hinweis**: | ||
+ | |||
+ | **Wichtig**: | ||
+ | |||
+ | \\ | ||
+ | |||
+ | ==== Ein Table verändern ==== | ||
+ | |||
+ | Wir können unserem Wörterbuch wie gewohnt neue Werte hinzufügen. Für Strings bleiben beide Schreibweisen: | ||
+ | <code lua> | ||
+ | -- Wir definieren einige String-Paare im Dictionary | ||
+ | Dictionary = { | ||
+ | Computer = " | ||
+ | Mouse = " | ||
+ | Keyboard = " | ||
+ | Screen = " | ||
+ | } | ||
+ | |||
+ | -- Jetzt fügen wir einige weitere hinzu: | ||
+ | Dictionary[" | ||
+ | Dictionary[" | ||
+ | |||
+ | -- Dabei können wir die Schreibweise frei wählen | ||
+ | Dictionary.Joystick = " | ||
+ | </ | ||
+ | |||
+ | \\ | ||
+ | |||
+ | ==== Tables als Werte ==== | ||
+ | |||
+ | Wenn man in einem Table weitere " | ||
+ | |||
+ | Aus Rollenspielen kennst du vielleicht Charaktereditoren, | ||
+ | <code lua> | ||
+ | Character = { | ||
+ | Hair = { | ||
+ | Style = "Short Messy", | ||
+ | Color = " | ||
+ | Effect = " | ||
+ | }, -- Key-Value-Paare werden weiterhin durch Kommas getrennt. Die werden oft vergessen | ||
+ | Eyes = { | ||
+ | Type = 9, | ||
+ | Color = " | ||
+ | Size = 5, | ||
+ | GapSize = 11 | ||
+ | }, | ||
+ | Nose = { | ||
+ | Type = 3, | ||
+ | Size = 7, | ||
+ | Effect = "Dirt Patch" | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | In diesem Beispiel haben wir oft " | ||
+ | '' | ||
+ | ist eine andere Variable als \\ | ||
+ | '' | ||
+ | |||
+ | Man kann dem geschachtelten Table wie gewohnt neue Werte hinzufügen: | ||
+ | <code lua> | ||
+ | Character.Nose.Height = 8 | ||
+ | |||
+ | Character.Mouth = { | ||
+ | Type = 10, | ||
+ | Width = 15, | ||
+ | Color = "Deep Red", | ||
+ | Height = 4 | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ---- | ||
+ | |||
+ | An dieser Stelle sind die Lua-Inhalte für diese Ebene abgeschlossen. Das nächste Kapitel gibt **wichtige** Konventionen an, //wie// man Lua lesbar aufschreibt. | ||
+ | |||
+ | [[ scripting: | ||
+ | [[ scripting: | ||
+ | [[ scripting: |
scripting/tutorials/level1/tables.1685288511.txt.gz · Zuletzt geändert: 2023/05/28 15:41 von fritz_98