Bei meinen JavaScript-Projekten treten manchmal kleine Probleme auf. Dies liegt daran, dass die meisten integrierten Funktionen von JavaScript X, Y ausführen, wenn Positionen benötigt werden. (In dieser Reihenfolge).
Wenn ich jedoch ein 2D-Array erstelle, beginne ich mit Y, und es erscheint mir logischer, die X-Achse horizontal auszuführen. Wenn ich es schlecht erklären kann, möchte ich Ihnen zeigen:
Meine Loops sehen also so aus:
for(var y = 0; y < 10; y++){
for(var x = 0; x < 10; x++){
console.log("Doh!");
}
}
Ist das so verrückt? Ich möchte zur normalen Praxis übergehen, damit es mir beim Erstellen meines Spiels leichter fällt und ich nicht ständig umschalten muss.
Warum ist es also X vor Y?
Bearbeiten: Hier ist ein weiteres Beispiel und wahrscheinlich der Hauptgrund für meine Verwirrung: X ist horizontal und Y ist vertikal in meinen Büchern.
[
[0,1,2,3,4],
[0,1,2,3,4],
[0,1,2,3,4],
[0,1,2,3,4],
]
quelle
Antworten:
Nein, wenn es für Sie funktioniert, machen Sie es nicht falsch. Wenn Sie wechseln möchten, tun Sie dies. Die Reihenfolge, in der Sie Zeilen / Spalten verarbeiten, ist manchmal willkürlich, manchmal nicht. Welche Reihenfolge Sie verwenden, hängt vollständig vom verwendeten Algorithmus ab.
Es gibt mehrere verschiedene Kombinationen für die Verarbeitung von X, Y. Es liegt an Ihnen, zu entscheiden, welcher für Ihren Algorithmus richtig ist. In dem Fall, in dem jede Iteration unabhängig von einer anderen ist, können Sie auswählen, welche Sie möchten. Sie können wechseln, was sich in der inneren Schleife befindet, und Sie können auch wechseln, wenn die Schleifen von min nach max oder von max nach min gehen.
Ich stelle mir vor, die Standardeinstellung ist:
denn so werden die Daten oft im Speicher angeordnet. (Nicht unbedingt für alle Sprachen zutreffend, da sich die Reihenfolge des Index ändern kann).
Zum Beispiel ein Array
A[3][3]
(A[X][Y]
):Wenn sich der
y
Wert in der inneren Schleife befindet, wird zuerst erhöht und dann "überrollt", um denx
Wert zu erhöhen . Davon abgesehen ist (X, Y) die Standardmethode, um es in Mathematik zu schreiben.quelle
Du machst es falsch ... irgendwie. Das Falsche, was Sie tun, ist, die Reihenfolge, in der die Koordinaten geschrieben werden, mit der Reihenfolge zu korrelieren, in der die Schleifen verschachtelt sind. Das sind ganz andere Ideen!
Insbesondere ist das Falsche, dass Ihr Koordinatensystem stark (und spröde) an Ihre Implementierung Ihres Datenspeichers gebunden ist. Das bedeutet, dass Sie aus OO-Sicht schlechten Code entwerfen. Der Datenspeicher sollte für das Objekt, das ihn verwendet, undurchsichtig sein, und das Objekt, das ihn verwendet, sollte sich nicht darum kümmern, wie die Daten gespeichert werden. Der Benutzer der Daten muss nur wissen, wie er die gewünschten Informationen erhält.
Was Sie tun sollten, ist einen Weg zu finden, Ihre verschachtelte Array-Datenstruktur zu abstrahieren und sie in einer Methode wie zu verbergen
getPoint(x,y)
. Dann müssen Sie sich keine Gedanken darüber machen, welches Array in welcher Reihenfolge verschachtelt ist. Sie können Ihre Rückwärtsdatenstruktur genau so lassen, wie sie ist, solange Ihre Getter-Methode weiß, dass sie zuerst das Array y findet und dann darin nach dem Element x sucht. Aber welcher Code auch immer aufruft,getPoint()
weiß das nicht. Es muss nur die beiden Koordinaten kennen, an denen es interessiert ist.quelle
Es spielt keine Rolle! Ich schreibe auch immer zuerst Y (sieht natürlicher aus). Wenn Sie Ihre Matrix als Zeilen im Array haben, können Sie sogar eine Optimierung durchführen. An Stelle von:
Sie können dies verwenden:
und vermeiden Sie viele Multiplikationen! :) :)
quelle