上对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