请帮我这个简单的基本伪代码

时间:2010-12-09 04:03:44

标签: loops for-loop selection if-statement

这对你们来说应该很容易,但我仍然无法在脑海中看到它。这就是我想要做的事情:

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')}

...

4 个答案:

答案 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的解决方案虽然看起来不太整洁但效果更好。 :)