假设我们有bool的二维数组,它们代表简单游戏的地图。如果单元格被某个游戏对象占用(否则为false) ,则数组的每个单元格都可以设置为true 。
我们想在循环中更新关于对象行为的地图。假设(由于某些原因)我们不能只更新地图的某些区域,我们必须迭代数组中的每个单元格,如果对象改变了它的位置,则否定它的值。
我们知道,在每个数组的更新中,只有很少的变化,但数组很大。现在问题来了。什么更优化。
(1) 这个:
for (int i = 0; i < Rows; i++)
for (int j = 0; j < Cols; j++)
{
bool newValue = update(i,j);
arr[i,j] = arr[i,j] != newValue ? newValue : arr[i,j];
}
(2) 这个:
for (int i = 0; i < Rows; i++)
for (int j = 0; j < Cols; j++)
{
bool newValue = update(i,j);
if(newValue != arr[i,j])
arr[i,j] = newValue;
}
(3) 或者可能是这样的:
for (int i = 0; i < Rows; i++)
for (int j = 0; j < Cols; j++)
{
arr[i,j] = update(i,j);
}
我认为(1)是最糟糕的解决方案。所以(2)对(3)。