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++) {
            // ...
        }
    }
}