Ich möchte ein Flag auf eine Funktion übergeben haben, die einen Algorithmus entweder durch col-Scannen oder Zeilenabtastung ausgeführt wird:Struktur auszuführen x ersten vs y zuerst auf 2D-Array
if run-on-x
for 1..x
for 1..y
do something with ary[x][y]
else
for 1..y
for 1..x
do something with ary[x][y]
aber ich weiß nicht möchte alle Schleifen und Logik duplizieren.
Ich habe mit diesem kommen:
let numPx = width * height;
for (let px = 0; px < numPx; px++) {
let [x, y] = yAxis ? [px % width, 0 | px/width] : [0 | px/height, px % height];
Aber ich denke, all die Mathematik ziemlich schwer ist, vor allem, wenn ich es bin mit ziemlich großer Arrays auf.
Gibt es einen besseren Weg, dies zu tun?
versuchen Wenn diese Java ist, dann, was Sie versuchen, ist wahrscheinlich eine Verschwendung von Zeit zu tun. Just-in-Time-Kompilierung wird versuchen, den Byte-Code jedes Mal weiter zu optimieren, wenn er evaluiert (ausgeführt) wird. Darüber hinaus ist es dynamisch: Es wird die Implementierung ändern, wenn eine andere Verzweigung genommen wird. Das bedeutet, dass es die Schleifen zur Laufzeit austauschen kann, wenn es optimaler erscheint (und keine Abhängigkeiten unterbricht). Der Versuch, den Compiler auszutricksen, wird wahrscheinlich zu einem "langsameren" Code führen, da der Optimierer nur noch mehr potentielle Abhängigkeiten sehen kann. – StarShine
@StarShine - Warum machst du die Annahme, dass es Java ist? –
Keine Annahme. Nur ein Kommentar, wenn Sie in Java arbeiten. Bis zu einem gewissen Grad funktioniert dieser Kommentar auch für Javascript. Die früheren Browser haben alle JIT-Compilation von Javascript, aber sind seitdem in Richtung native Code-Generierung bewegt. Es ist jedoch wahrscheinlich, dass zukünftige Entwicklungen von Javascript-Compilern einige Aspekte von jit, wie etwa Schleifenoptimierungen und Verzweigungsvorhersageoptimierung, wieder einbringen werden, wenn auch nativer Byte-Code erzeugt wird. Siehe auch http: // creativejs.com/2013/06/the-race-for-speed-part-1-der-javascript-engine-family-tree/ – StarShine