这个问题包含一个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,有没有比这两种方法更好的方法呢?
答案 0 :(得分:1)
我会采用第二种方式,或者我会使用xor操作,如下所示:
for (var i = 0; i < rows; i++) {
for (var j = 0; j < cols; j++) {
arr[i][j] ^= 1;
}
}
问题是,如果语句转换为分支指令,由于分支错误预测可能会很慢。但是,像这样的示例中的性能增益几乎不会显示,如果它使代码的可读性降低,那么它就不值得了。如果绝对必要,请始终优化最后一次。