Inhaltsverzeichnis
Die Table-Funktionen
Einleitung
Hier sollte noch ein einleitender Text hin!
Funktionsübersicht
Funktion | Syntax | Beschreibung |
---|---|---|
concat | table.concat(table [, _sep [, _i [, _j]]]) | Verbindet die Elemente einer Tabelle [von _i bis _j] miteinander zu einem String [mit Seperator _sep] |
foreach | table.foreach(_table, _f) | Wendet nacheinander die Funktion _f auf jedes Element der Tabelle _table an und übergibt dabei bei jedem Durchlauf das jeweilige Schlüssel-Wert Paar |
foreachi | table.foreachi(_table, _f) | Wie foreach nur das hier das jeweilige Index-Wert Paar an die Funktion _f übergeben wird |
getn | table.getn(_table) | Gibt die Anzahl der Elemente einer Tabelle _table zurück |
insert | table.insert(_table, [_pos,] _value) | Fügt einen Wert _value in eine Tabelle _table ein. Wenn eine Position _pos angegeben wird, wird der Wert vor dem sich aktuell an der Position befindlichen Wert eingefügt |
remove | table.remove(_table [, _pos]) | Entfernt ein Element aus einer Tabelle _table. Wenn eine Position _pos angegeben wird, wird das Element, welches sich aktuell an der Position befindet entfernt, ansonsten das jeweils letzte Element. Die Funktion liefert das entfernte Element zurück. Nach dem Entfernen eines Elements wird die Tabelle sequenziell neu indexiert und die Tabellen-Größe (siehe table.getn) wird aktualisiert |
setn | table.setn(_table, _n) | Setzt die Größe einer Tabelle _table explizit auf die Größe _n. Enthält die Tabelle einen Wert n, so wird dieser aktualisiert |
sort | table.sort(_table [, _comp]) | Sortiert eine Tabelle _table. Die Standardsortierung, wenn keine Sortier-Funktion _comp angegeben wird, erfolgt aufsteigend (a < b) |
Beispiele & ausführliche Erläuterungen
Hier sollte zu jeder Table-Funktion mind. 1 Beispiel hin. Zusätzlich sollten die Funktionen nochmals ausführlich dokumentiert werden. Es wäre auch gut, wenn die Beispiele konkret auf DEdK bezogen werden!
concat
table.concat(_table [, _sep [, _i [, _j]]])
- Beispiel ohne Angabe von _sep , _i und _j
table.concat({ 1, 2, "drei", 4, "fuenf" })
12drei4fuenf
- Beispiel mit Angabe eines Seperators _sep
table.concat({ 1, 2, "drei", 4, "fuenf" }, ", ")
1, 2, drei, 4, fuenf
- Beispiel mit Angabe eines Seperators _sep und einem Startwert _i
table.concat({ 1, 2, "drei", 4, "fuenf" }, ", ", 2)
2, drei, 4, fuenf
- Beispiel mit Angabe eines Seperators _sep , einem Startwert _i und einem Endwert _j
table.concat({ 1, 2, "drei", 4, "fuenf" }, ", ", 2, 4)
2, drei, 4
Jedes Element der Tabelle muss in einen String umwandelbar sein! Deshalb lassen sich auch keine Tables miteinander verbinden, da diese nicht in einen String umwandelbar sind.
foreach
table.foreach(_table, _f)
Folgende Tabelle sei gegeben:
_table={"eins", zwei="drei", "vier", "zwei", fuenf="fuenf"}
- Beispiel
table.foreach(_table, Message)
1 2 3 fuenf zwei
Hier werden die Schlüssel-/Indexwerte ausgegeben, nicht aber der eigentliche Wert. Beachte die „automatische“ Sortierung: (Index) Zahlenwerte (x < y), (Schlüssel) Stringwerte (a < b)
- Beispiel
table.foreach(_table, function(k,v) Message("Key: "..k.." Value: "..v) end)
Key: 1 Value: eins Key: 2 Value: vier Key: 3 Value: zwei Key: fuenf Value: fuenf Key: zwei Value: drei
Hier werden sowohl die Schlüssel-/Indexwerte, als auch die Werte selbst ausgegeben. Die Funktion foreach übergibt immer das Wertepaar aus Index + Wert, bzw. aus Schlüssel + Wert im Gegensatz zu der Funktion foreachi, die nur die Index-Wert Paare übergibt, nicht aber die Schlüssel-Wert Paare (siehe auch foreachi)
- Beispiel
table.foreach(Diplomacy, function(k,v) Message("Key: "..k.." Value: "..v) end)
Key: Neutral Value: 2 Key: Friendly Value: 1 Key: Hostile Value: 3
Die Funktion eignet sich während des Scriptens auch gut dafür, um Tables auszulesen.
foreachi
table.foreachi(_table, _f)
Folgende Tabelle sei gegeben:
_table={"eins", zwei="drei", "vier", "zwei", fuenf="fuenf"}
- Beispiel
table.foreachi(_table, function(k,v) Message("Key: "..k.." Value: "..v) end)
Key: 1 Value: eins Key: 2 Value: vier Key: 3 Value: zwei
Beachte dass hier im Gegensatz zu der Funktion foreach nur die Index-Wert Paare ausgegeben werden (siehe auch foreach).
getn
table.getn(_table)
Folgende Tabelle sei gegeben:
_table={"eins", "zwei", "drei"}
- Beispiel
Message(table.getn(_table))
3
Wenn kein Wert für n in der Tabelle vorhanden ist und auch kein nil-Wert, zählt die Funktion die Anzahl der Elemente.
Folgende Tabelle sei gegeben:
_table={"eins", "zwei", "drei"; n=5}
- Beispiel
Message(table.getn(_table))
5
Ist ein Wert für n in der Tabelle vorhanden, so übersteuert dieser den Zählwert der Funktion.
- Beispiel
table.setn(_table, 10) Message(table.getn(_table))
10
Der Wert für n kann auch mit Hilfe der Funktion table.setn gesetzt werden.
Folgende Tabelle sei gegeben:
_table={"eins", "zwei", nil, "vier"}
- Beispiel
Message(table.getn(_table))
2
Die Zählfunktion bricht ab, sobald sie auf einen nil-Wert trifft.
insert
table.insert(_table, [_pos,] _value)
Folgende Tabelle sei gegeben:
_table={1, 2, "vier"}
- Beispiel
table.insert(_table, "drei") table.foreach(_table, function(k,v) Message("Key: "..k.." Value: "..v) end)
Key: 1 Value: 1 Key: 2 Value: 2 Key: 3 Value: vier Key: 4 Value: drei
Ohne eine Angabe der Position _pos wird der neue Wert am Ende der Tabelle eingefügt.
- Beispiel
table.insert(_table, 3, "drei") table.foreach(_table, function(k,v) Message("Key: "..k.." Value: "..v) end)
Key: 1 Value: 1 Key: 2 Value: 2 Key: 3 Value: drei Key: 4 Value: vier
Wenn eine Position _pos angegeben wird, wird der Wert vor dem sich aktuell an der Position befindlichen Wert eingefügt.
Folgende Tabelle sei gegeben:
_table={1, 2, "vier"; n=10}
- Beispiel
table.insert(_table, "drei") table.foreach(_table, function(k,v) Message("Key: "..k.." Value: "..v) end)
Key: 1 Value: 1 Key: 2 Value: 2 Key: 3 Value: vier Key: 11 Value: drei Key: n Value: 11
Wenn die Tabelle einen Wert n besitzt, und ein Wert am Ende eingefügt (eigentlich angehängt) wird, erhält er auch den entsprechenden Indexwert. Bei den dazwischenliegenden Elementen handelt es sich um nil-Werte (siehe auch getn).
remove
table.remove(_table, [_pos])
Folgende Tabelle sei gegeben:
_table={1, 2, "vier", "drei"}
- Beispiel
Message(table.remove(_table))
drei
Ohne eine Angabe der Position _pos wird das jeweils letzte Element der Tabelle gelöscht und von der Funktion zurückgegeben.
- Beispiel
Message(table.remove(_table, 3))
vier
Wenn eine Position _pos angegeben wird, wird das Element, welches sich an der Stelle der Tabelle befindet gelöscht und von der Funktion zurückgegeben.
Folgende Tabelle sei gegeben:
_table={1, 2, "vier", "drei"; n=10}
- Beispiel
Message(table.getn(_table)) Message(table.remove(_table)) Message(table.getn(_table))
10 9
Da die Tabelle durch n=10 eine Länge von 10 hat, wobei die Elemente von Indexwert 5 bis 10 nil-Werte sind, liefert die Funktion beim Löschen des letzten Elementes auch nil zurück. Die Größe der Tabelle verringert sich aber auf 9.
- Beispiel
Message(table.getn(_table)) Message(table.remove(_table, 3)) Message(table.getn(_table))
10 vier 9
- Beispiel
Natürlich kann man auch alle Elemente einer Tabelle in einer Schleife löschen:for i=1,table.getn(_table) do table.remove(_table) end
oder rückwärts:
for i=table.getn(_table),1,-1 do table.remove(_table) end
Aufpassen muss man dagegen, wenn man indizierte Elemente löschen möchte und dazu die Variable der Schleifen-Funktion benutzt! Dann kann man nur die Rückwärts-Schleife verwenden!
Beispiel einfügen!