计算或条件检查是否会产生更好的性能

时间:2015-03-29 14:26:23

标签: arrays performance

这个问题包含一个JavaScript示例,但它也可能与其他语言相关。

我有一个二维二进制数组(值设置为1和0)。我想做一个切换所有值的动作,意思是将所有0转为1,将所有1转为0。

这是一种更好的方法:

1)

for(var i = 0; i < rowsNum; i++)
    {
        for(var j = 0; j < colNum; j++)
        {
            if(arr[i][j] == 0)
            {
                arr[i][j] = 1;
            }
            else
            {
                arr[i][j] = 0;
            }
        }
    }

2)

for(var i = 0; i < rowsNum; i++)
    {
        for(var j = 0; j < colNum; j++)
        {
           arr[i][j] = 1 - arr[i][j];
        }
    }

我想知道是否有一种最适合大多数情况的通用方法。另外,特别是关于JS,有没有比这两种方法更好的方法呢?

1 个答案:

答案 0 :(得分:1)

我会采用第二种方式,或者我会使用xor操作,如下所示:

for (var i = 0; i < rows; i++) {
    for (var j = 0; j < cols; j++) {
        arr[i][j] ^= 1;
    }
}

问题是,如果语句转换为分支指令,由于分支错误预测可能会很慢。但是,像这样的示例中的性能增益几乎不会显示,如果它使代码的可读性降低,那么它就不值得了。如果绝对必要,请始终优化最后一次。