上對y首次運行X首先我想有傳遞到運行的任何山坳掃描或行掃描的算法的功能標誌:結構以二維數組
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]
但我不想要複製所有的循環和邏輯。
我想出這個:
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];
但我認爲所有的數學是相當沉重的,尤其是當我上運行它相當大的陣列。
有沒有更好的方法來做到這一點?
如果這是java的,那麼你正在嘗試做的可能是在浪費時間。每次進行評估(執行)時,即時編譯將嘗試進一步優化字節碼。最重要的是,它是動態的:如果採用不同的分支,它將改變實現。這意味着如果它看起來更加優化(並且不打破任何依賴),它可以在運行時交換循環。試圖智取編譯器可能會導致'較慢'的代碼,因爲優化器只會看到更多潛在的依賴關係被破壞。 – StarShine
@StarShine - 你爲什麼假設它是java? –
沒有假設。只是在使用Java的情況下發表評論。在某種程度上,這個評論也適用於Javascript。早期的瀏覽器都做了JavaScript的JIT編譯,但後來轉向了本地代碼生成。然而,未來JavaScript編譯器的演變可能會包含jit的某些方面,例如在生成本地字節碼時重新引入循環優化和分支預測優化。另見http:// creativejs。com/2013/06/the-race-for-speed-part-1-javascript-engine-family-tree/ – StarShine