Tables


Bei Tables denkt sich so manch einer "Für was sollen die bitte gut sein?". Ich hab mir das zu Beginn meiner Lua-Karriere zumindest gedacht. Mit der Zeit wird man aber nicht nur Älter, sondern auch klüger. Damit meine ich, dass man irgendwann ihren Sinn und ihre Nützlichkeit begreift.

Zuallererst bekommt man immer wieder eingetrichtert, dass sie etwas Übersicht in den Code bringen und man deshalb mit "tables" arbeiten sollte. Nun, ich arbeitete generell gern unübersichtlich und total durcheinander, drum kamen "tables" bei mir gar nicht in Frage. Bis ich dann begriffen habe, dass man mit ihnen noch viel mehr machen kann. Man kann sie nämlich, im Gegensatz zu if-Blöcken, mittels for-Schleifen komplett durchlaufen lassen. Sprich man kann automatisiert jeden Wert auslesen und mit ihm anstellen, was man will. Das spart viel Zeit und ist in manchen Fällen sogar zwingend erforderlich.

Wie sehen Tables denn eigentlich aus?

	table = {}
	

...das wäre jetzt mal eine leere "table" ohne Einträge. Nun füllen wir sie doch einfach mal ein wenig:

	table = {"hallo,"," du","lernst ","gerade ","tables ","kennen."}
	

...nun könnten wir den Inhalt der "table" darstellen mit screen:print():

	color= Color.new(255,255,255)
	table = {"hallo,", " du", "lernst ", "gerade ", "tables ", "kennen."}
	screen:print(0,0,table[1]..table[2]..table[3]..table[4]..table[5]..table[6],color)
	

...dann würde auf dem Bildschirm stehen "hallo, du lernst gerade tables kennen". Nun gut, das ist noch nicht besonders praktisch. Aber jetzt steigen wir mal tiefer in die Materie ein, ich liste hier jetzt mal alle wichtigen Befehle zur Arbeit mit "tables" auf:

	table.concat (table , zwischentext , ab wann , bis wo)
	--...verbindet die Werte einer table.
	table.foreach (table, funktion)
	--...geht alle Felder einer table durch und übergibt sie ggf an eine Funktion.
	table.getn (table)
	--...ermittelt die Anzahl der Tablefelder.
	table.sort (table , funktion)
	--...sortiert eine table. Ist keine Funktion gegeben wird nach groesser/kleiner Prinzip sortiert.
	table.insert (table, position, wert)
	--...fügt ein Feld in eine vorhandene table ein.
	table.remove (table , position)
	--...loescht ein Feld einer table
	table.setn (table, felderanzahl)
	--...setzt die Anzahl der Tablefelder.
	

Da wir das jetzt wissen, möchte ich euch nun zeigen, warum "tables" so praktisch sind. Mit einer for-schleife kann man alle Tablefelder einmal durchgehen und sie z.B. nacheinander bzw untereinander anzeigen lassen:

	limit = table.getn(table)
	y = 0
	
	for i=1,limit do
		y=y+10
		screen:print(0,y,table[i],color)
	end
	

...lasst euch nicht von "i" verwirren. "i" ist eine Variable, die hier mit dem Wert 1 versehen wird. Bei jedem Neudurchlauf des Scriptes wird "i" dann um 1 größer. Das kann man in for-Schleifen ausnutzen. Man könnte anstatt i auch "klabautermann" verwenden, nur zur Veranschaulichung. Dieser kleine Codeblock tut das gleiche wie:

	screen:print(0,0,table[1],color)
	screen:print(0,10,table[2],color)
	screen:print(0,20,table[3],color)
	screen:print(0,30,table[4],color)
	screen:print(0,40,table[5],color)
	screen:print(0,50,table[6],color)
	

...hier ist das nicht so gravierend, aber wenn man mal 100 Tablefelder hat, ist die for-Schleife die elegantere Lösung.