javascript - 2D dizide önce x mi yoksa önce y mi çalıştırılacağı yapısı
Bir algoritmayı ya sütun taramasıyla ya da satır taramasıyla çalıştıran bir fonksiyona bayrak geçirilmesini istiyorum:
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]
Ama tüm döngüleri ve mantığı çoğaltmak istemiyorum.
Bununla ilgili şunu düşündüm:
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];
Ama bence tüm matematik oldukça ağır, özellikle de bunu oldukça büyük diziler üzerinde çalıştırdığımda.
Bunu yapmanın daha iyi bir yolu var mı?
Cevap #1
Belki onları sadece parametre olarak şöyle geçirerek?
function colRowScan(1stAxis,2ndAxis)
for 1.. 1stAxis
for 1.. 2ndAxis
do something with ary[x][y]
Ne 'bir şey yapmak' olduğunu görmeden, bunun neden işe yaramayabileceğine dair herhangi bir öngörülmemiş sebep olup olmadığını bilmiyorum ama paylaştıklarınıza göre işe yarayacaktır.
Burada ne yapmaya çalıştığından tamamen emin değilim:
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];
Cevap #2
function f(x, y, on_x) {
var a, b;
if (on_x) {
a = x;
b = y;
}
else {
a = y;
b = x;
}
for (var ia = 0; ia < a.length; ia++) {
for (var ib = 0; ib = b.length; ib++) {
// ...
}
}
}
