Benutzer-Werkzeuge

Webseiten-Werkzeuge


tutorials:tables

Tables

Chromix

Table (Tabelle) ist die einzige Struktur für Daten in Lua. Sie ist aber universell verwendbar.

Normalerweise kann man sich in einer Variable nur einen Wert merken. Wenn man sich nun viele verschiedene Werte merken will, hat man ein gewisses Problem:

variable1 = GetPosition( "Held1" )
variable2 = GetPosition( "Held2" )
variable3 = GetPosition( "Held3" )
variable4 = GetPosition( "Held4" )
variable5 = GetPosition( "Held5" )
...

Eine Tabelle hat genau 2 Spalten. Eine für den Index, und eine für den zugeordneten Wert. Jedem Index kann nur genau ein Wert zugeordnet werden. Es ist aber natürlich möglich, unter zwei verschiedenen Indices den gleichen Wert abzulegen.

Wenn man eine Tabelle benutzen will, muss sie zunächst deklariert werden.

test = {}

Die Variable „test“ enthält jetzt eine leere Tabelle.
In dieser können anschliessend Werte abgelegt werden:

test[1] = GetPosition( "Held1" )
test[2] = GetPosition( "Held2" )
test[3] = GetPosition( "Held3" )
...

Nun steht die Position von Held1 an Stelle 1.
Hat man nun eine Variable „position“, die eine Zahl im gültigen Bereich enthält, so kann man sich damit eine Heldenposition aus der Tabelle holen.

test[position]

Es gibt noch mehr Möglichkeiten, die Tabelle zu nutzen.
Hier als einfache Liste:

test = {
	GetPosition( "Held1" ),
	GetPosition( "Held2" ),
	GetPosition( "Held3" )
}

Hier werden die Positionen der Helden direkt bei der Deklaration in die Tabelle gelegt. Da der Index bei 1 anfängt, entspricht der Tabelleninhalt genau dem des vorherigen Beispiels.

Möchte man nun die Position eines vierten Helden hinzufügen, kann man das ganz bequem machen, ohne wissen zu müssen wieviele Helden bereits in der Tabelle enthalten sind:

table.insert( test, GetPosition( "HeldX" ) )

Somit entspricht test[4] nun der Position von HeldX.

Der Indexwert muss aber nicht zwingend eine Zahl sein. Es kann auch ein beliebiger anderer Wert sein. So kann man eine Tabelle auch als Objekt sehen, den man Eigenschaften zuweist.

briefing = {};
briefing.title = "Test"
briefing.text = "Dies ist nur ein Test"
briefing.position = GetPosition( "Da_drueben" )

Hier wurde eine neue „briefing“ Tabelle erstellt, deren Eintrag an der Stelle „titel“ „Test“ lautet.
Dies ist eine Notation, mit der man verdeutlicht, daß man hier einen Eigenschafts- oder Strukturwert zuweist. Genausogut hätte man dies auch in der Indexschreibweise erledigen können:

briefing["title"] = "Test"

Man braucht auch hier natürlich nicht statisch spezifizieren, welchen Wert man aus der Tabelle wieder auslesen möchte:

wasSollsSein = "text"
print( briefing[wasSollsSein] )

Da „wasSollsSein“ momentan „text“ enthält, wird der Wert ausgegeben, den die Tabelle an der Stelle „text“ enthält, somit also „Dies ist nur ein Test“.

Dieses hier würde nicht funktionieren:

wasSollsSein = "text"
print( briefing.wasSollsSein )

Denn briefing.wasSollsSein ist nur eine andere Schreibweise für briefing[„wasSollsSein“] und dem Index „wasSollsSein“ wurde kein Wert zugeordnet.

Hier noch eine weitere Schreibweise für das erste Briefing Beispiel:

briefing = {
	title = "Test",
	text = "Dies ist nur ein Test",
	position = GetPosition( "Da_drueben" )
};

Die Werte werden hier, wie schon im Beispiel mit der Liste, direkt bei der Deklaration der Tabelle übergeben.

Mittels Schleifen können Tabellen automatisiert bearbeitet werden. Diese werden aber erst später im Tutorial erklärt, da sie in vielen normalen Scripten nicht verwendet werden brauchen. Hier aber schon eine kleine Vorschau in Form eines Beispiels, um eine Tabelle mit den Positionen von Held1 bis Held10 zu füllen:

helden = {}
for index = 1, 10 do
	table.insert( helden, GetPosition( "Held"..index ) )
end

siehe auch:

LUA-API Table-Funktionen

Zur Tutorial-Übersicht

tutorials/tables.txt · Zuletzt geändert: 2021/09/18 19:16 (Externe Bearbeitung)