Inhaltsverzeichnis

Die Table-Funktionen

Einleitung

FIXME Hier sollte noch ein einleitender Text hin!


Funktionsübersicht

FunktionSyntaxBeschreibung
concattable.concat(table [, _sep [, _i [, _j]]])Verbindet die Elemente einer Tabelle [von _i bis _j] miteinander zu einem String [mit Seperator _sep]
foreachtable.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
foreachitable.foreachi(_table, _f)Wie foreach nur das hier das jeweilige Index-Wert Paar an die Funktion _f übergeben wird
getntable.getn(_table)Gibt die Anzahl der Elemente einer Tabelle _table zurück
inserttable.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
removetable.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
setntable.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
sorttable.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

FIXME 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]]])

  1. Beispiel ohne Angabe von _sep , _i und _j
    table.concat({ 1, 2, "drei", 4, "fuenf" })
    12drei4fuenf
  2. Beispiel mit Angabe eines Seperators _sep
    table.concat({ 1, 2, "drei", 4, "fuenf" }, ", ")
    1, 2, drei, 4, fuenf
  3. Beispiel mit Angabe eines Seperators _sep und einem Startwert _i
    table.concat({ 1, 2, "drei", 4, "fuenf" }, ", ", 2)
    2, drei, 4, fuenf
  4. 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"}
  1. 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)

  2. 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)

  3. 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"}
  1. 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"}
  1. 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}
  1. Beispiel
    Message(table.getn(_table))
    5

    Ist ein Wert für n in der Tabelle vorhanden, so übersteuert dieser den Zählwert der Funktion.

  2. 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"}
  1. 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"}
  1. 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.

  2. 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}
  1. 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"}
  1. 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.

  2. 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}
  1. 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.

  2. Beispiel
    Message(table.getn(_table))
    Message(table.remove(_table, 3))
    Message(table.getn(_table))
    10
    vier
    9
  3. 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!
    FIXME Beispiel einfügen!