这对你们来说应该很容易,但我仍然无法在脑海中看到它。这就是我想要做的事情:
if (flag)
for (i = 0; i < 10; i++)
{LARGE_BLOCK_OF_CODE (that visits an array in order)}
else
for (i = 9; i >= 0; i--)
{LARGE_BLOCK_OF_CODE (that visits an array in REVERSE order)}
问题是这个代码块不能放在一个函数中,我不想复制/粘贴它两次。我有什么方法可以这样做:
if (flag)
loop = for (i = 0; i < 10; i++);
else
loop = for (i = 9; i >= 0; i--);
loop
{LARGE_BLOCK_OF_CODE (that visits an array in the order specified in 'loop')}
...
答案 0 :(得分:2)
为循环的开始和结束创建变量,并创建第三个变量以确定迭代的“方向”。
然后让循环遍历您的ONE代码块。像这样......
int iStart = 0;
int iEnd = 9;
int iIncrement = +1;
if (reverse)
{
iStart = 9;
iEnd = 0;
iIncrement = -1;
}
for (i = iStart; i != iEnd; i += iIncrement)
{
//...large block of code here...
}
答案 1 :(得分:1)
将LARGE_BLOCK_OF_CODE放入函数中,接收顺序作为参数。然后在您需要的任意数量的循环中重复使用它。
答案 2 :(得分:1)
我不知道您的阵列有多大。也许有可能生成一个额外的数组,以所需的顺序保存所需的索引:
indexes = []
for (i = 0; i < 10; i++)
indexes.add(i)
if (!flag)
indexes.reverse()
for each (i in indexes)
{LARGE_BLOCK_OF_CODE}
答案 3 :(得分:0)
for (i = flag?0:9; i != flag?10:0; i += flag?1:-1)
{
//LARGE_BLOCK_OF_CODE
}
嗯,我知道......:如果不是那么太多了。
是的,FlipScript的解决方案虽然看起来不太整洁但效果更好。 :)