2016-08-02 6 views
1

Ich bin ein Noob in Lua. Ich habe zwei ArraysArray wirkt seltsam in Lua

erste:

levels={ 
 
-- 1 
 
{ 
 
{9,9,9,9,9,9,9,9,9}, 
 
{9,9,9,9,9,9,9,9,9}, 
 
{9,9,1,0,9,0,3,9,9}, 
 
{9,9,9,9,9,9,9,9,9}, 
 
{9,9,9,9,9,9,9,9,9} 
 
} 
 
, 
 
-- 2 
 
{ 
 
{9,9,9,9,9}, 
 
{9,9,9,9,9}, 
 
{9,9,1,9,9}, 
 
{9,9,0,9,9}, 
 
{9,9,0,9,9}, 
 
{9,9,0,9,9}, 
 
{9,9,0,9,9}, 
 
{9,9,3,9,9}, 
 
{9,9,9,9,9}, 
 
{9,9,9,9,9} 
 
} 
 
, 
 
-- 3 
 
{ 
 
{9,9,9,9,9,9,9,9,9,9}, 
 
{9,9,9,9,9,9,9,9,9,9}, 
 
{9,9,0,9,0,9,9,9,9,9}, 
 
{9,9,1,0,0,9,0,3,9,9}, 
 
{9,9,9,9,9,9,9,9,9,9}, 
 
{9,9,9,9,9,9,9,9,9,9} 
 
} 
 
}

und die zweite erkläre ich es wie folgt aus:

playingLevel=levels[1]

Die probl em ist, dass, nachdem ich playingLevel Werte geändert habe, das Ebenen-Array auch auf die gleiche Weise geändert wird. Ich möchte nur playingLevel ändern.

Antwort

2

Tabellenwerte sind Referenzen in lua. wenn man

playingLevel=levels[1] 

tun Sie sind nicht der Tabellenwert bei levels[1] in playingLevel kopieren, sind Sie an levels[1] einen Hinweis auf die tatsächlichen Daten zu erhalten, so dass ein Array-Wert durch playingLevel ändernden ist im Wesentlichen der gleiche wie der Wert ändern, wie wenn du levels[1][some_index] = new_value geschrieben hast.

Wenn Sie eine Kopie der Daten benötigen, benötigen Sie eine Funktion, die die Kopie für Sie erstellt. (entweder eine seichte oder eine tiefe Kopie, abhängig von Ihrem Anwendungsfall)

, also würde Ihr Code wie playingLevel = copyTable(levels[1]) statt wo copyTable Ihre benutzerdefinierte Implementierung einer Funktion, die eine Kopie der Zieltabelle erstellen kann aussehen.

+1

Danke für die Antwort, ich habe eine Funktion verwendet, die den Wert der Ebenen zurückgibt und es funktioniert jetzt! –

+0

toll, ich bin froh, dass du dein Problem gelöst hast :) –