scripting:tutorials:level1:tables
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Beide Seiten, vorherige ÜberarbeitungVorherige ÜberarbeitungNächste Überarbeitung | Vorherige Überarbeitung | ||
scripting:tutorials:level1:tables [2023/05/28 15:42] – 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 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.1685288570.txt.gz · Zuletzt geändert: 2023/05/28 15:42 von fritz_98