Drei-dimensionale Tabelle in Lua
Ich muss der beste Weg, um eine dreidimensionale Tabelle für Pixel. Was ich tun müssen, ist, mehrere x -, y-Tische (grundsätzlich dreidimensional) es ist, raster-mehrere zweidimensionale pixel-Karten mit Transparenz. Sie sehen, ich kann zwei Dimensionen einfach so:
pixels = {{},{}}
pixels[1][5] = "green" --just an example
print(pixels[1][5])
Aber ich kann nicht diese wie kann ich in Java...
pixels = {{}, {}, {}}
pixels[1][4][3] = "red" -- [x][y][z]
print(pixels[1][4][3])
Dies ist die Funktionalität, die ich will, aber ich eklig bekam, um dieses dadurch...
pixels = {}
pixels["x23,y02,z05"] = "green"
print(pixels["x23,y02,z05"]")
Ich einfach string verwenden.sub und string.concat zu Lesen und legen Sie die Tabellen... ich würde wirklich gerne die Funktionalität von Beispiel 2 zu arbeiten, aber ich weiß, es könnte umgesetzt werden müssen, unterschiedlich.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Grundsätzlich gibt es zwei Wege zu gehen über diese
Auto-Tabellen
Auto-Tabellen generieren, die sub-Tabellen transparent, aber mit metatables und im wesentlichen nach der Erstellung sollten Sie in der Lage sein, Sie zu vergessen.
Was nicht so nettes über Sie ist, dass Sie generieren viele von Tabellen -- offensichtlich. Dass einige Speicher-overhead und jede Ebene der Tiefe erhöht sich die Ausführungszeit.
Was ist schön an Ihnen ist, dass Sie können vollständig dynamische Größe. Sie könnten sogar machen Sie unendlich tief. Wenn in Ihrem Anwendungsfall ist dies sehr wahrscheinlich nicht nötig und wahrscheinlich auch eine schlechte Idee.
Diese Struktur ist sehr geeignet für nicht-ganzzahlige Indizes wenn, Sie könnten zum Beispiel die Tiefe auch davon abhängen, "template-Struktur" und so implementieren Sie eine transparente dynamische Konfiguration der Tabelle, aber ich werde immer Seite verfolgt...
Abgeflacht arrays
Die andere Variante reduziert werden arrays. user3125367 schrieb schon über Sie, aber ich möchte zu erweitern, wie dies getan werden kann, viel bequemer und erklären, ein paar Dinge.
Oft Abflachung Ihrer multi-dimensionalen arrays ist eine gute Idee, in CG auf jeden Fall, denn dann kann man viele matrix-Operationen sehr leicht. Die Berechnung einer modifizierten index ist auch relativ Billig in Bezug auf die Verarbeitung erforderliche Zeit. Es sollte aber erwähnt werden, obwohl doch offensichtlich, dass dieser Ansatz funktioniert nur mit numerischen Tasten und einer vordefinierten Größe der matrix.
Dieser code stammt aus einer anderen Antwort von mir: dynamische Tabellen oder arrays
Kann es wohl werden, optimiert ein wenig (zum Beispiel berechnen
X*Y
im Verschluss), aber ich wollte fügen Sie den original-code hier. Trotzdem, mit diesem können Sie sowohl einfache arbeiten auf der abgeflachten Struktur, die nur mit der normalen array-Indizierung:Sowie 3d-Indizes direkt:
Können Sie auch leicht ändern Sie die Funktion zur Rückgabe eines default-Wert für fehlende Schlüssel, indem ein
__index
Bereich der metatable oder so, dass die Tabelle speichert die matrix-Dimensionen etc.In deinem ersten code:
ist äquivalent zu:
Hier
pixels[1]
bereits eine Tabelle, deshalb kann man einen Wert zuweisenpixels[1][5]
.Aber Sie der zweite code:
Hier
pixels
ist noch immer ein zweidimensionales array (mit 3 Elementen). Es ist äquivalent zu :pixels[1]
ist eine Tabelle, aberpixels[1][4]
ist nicht. Was Sie tun müssen, ist zu gebenpixels[1][4]
eine Tabelle Konstruktor wie diese:Neben der klassischen 'array in array in array' - Schema, können Sie die Vorteile von Lua-Tabelle Interna. Wie? Lua-Tabelle ist nur eine Zuordnung von Schlüssel und Wert, und wenn Sie es wie ein array ist, überspringen Sie einige Schlüssel und dieser kostet praktisch nichts.
So, wenn Ihr Datendichte (über 50% Ihrer 3d-Punkte, die keinen Wert haben), können Sie davon profitieren: