【发布时间】:2012-06-05 05:50:22
【问题描述】:
假设我们有代表简单游戏地图的 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)。
【问题讨论】:
-
我认为 2 和 3 之间的差异会很小,以至于差异并不重要,所以选择最简单的(3)。这似乎同意这个 SO 问题stackoverflow.com/questions/4586795/…
标签: optimization variable-assignment