有没有办法循环循环嵌套循环?

时间:2012-08-16 10:26:20

标签: c#

正如标题所说,是否有一种方法可以非递归地循环循环嵌套?也就是说,我想说我想这样做:

while (condition)
{
    while (condition)
    {
         while (condition)
         {
             .... //<- more whiles
         }
     }
}

有100个嵌套的while循环。有没有办法在没有硬编码和不使用递归的情况下做到这一点?

编辑:为了清楚起见,100用于演示目的。

5 个答案:

答案 0 :(得分:0)

由于没有其他事情发生:

while ({conditionA} && {conditionB} && {conditionC})
{
   /// ...
}

如果你有 100 ,我怀疑你可能做错了什么。如果没有更多的背景,我们无法评论。

答案 1 :(得分:0)

我不确定有100个while循环的有效用例,但是这里有。

我能想到的只是结合时间条件。类似的东西:

while(x == 1)
{
    while(y == 2)
    {
    }
}

可能成为:

while(x == 1 && y == 2)
{
}

如果您的病情开始变得太长,我可能会将其提取出另一种方法。

while(ShouldLoop(x, y))
{
}

private bool ShouldLoop(int x, int y)
{
    return x == 1 && y == 2;
}

当然,只有在没有嵌套的循环中做任何工作时,这才有效。

答案 2 :(得分:0)

您是否考虑过使用BitArray课程?这可以用作条件掩码,例如......

答案 3 :(得分:0)

如果您有100个嵌套循环,我认为您的算法可能有问题。

至少,您可以尝试使您的方法递归。这样的事情(根据你实际想做的事情,它可能会有很大差异):

private void RecursiveWhile(int nestedLevel)
{
    // some logic
    if (nestedLevel == 0)
    {
        // some logic
    }
    else
    {     
        // some logic, maybe a while
        RecursiveWhile(nestedLevel - 1);
        // some logic, maybe breaking out of the while
    }
}

例如,您可以将RecursiveWhile(100)用于100个等级。

但我非常鼓励您退后一步,考虑一下您的算法以及为什么需要100级迭代。

答案 4 :(得分:0)

我知道你特意说没有递归,但我认为这是因为你希望能够在层次结构的路上调用不同的函数/方法。

如果你可以递归地调用相同的函数,但是依次让那个函数,使用委托调用各种其他函数呢?是否可以传递一个委托函数列表来调用,可能还有另一个委托列表用于条件(是否继续循环)?

我只花了几分钟时间,这是一个抽象的想法/思想实验,而不仅仅是一个具体的解决方案;我甚至不确定这是否可行,但这应该显示基本概念:

public delegate void CallableFunctionDelegate();
public delegate bool CallableCondition();

public void CallDelegatesRecursively(
                        List<CallableFunctionDelegate> methodsToCall, 
                        List<CallableCondition> conditionsToCall){

    var currentDelegate = delegatesToCall[0];

    while(conditionsToCall()){

        currentDelegate();  // Call current function

        // (Verify that the list is not empty, etc...)

        var restOfList = methodsToCall.GetRange(1, methodsToCall.length);
        var restOfConditions = 
                   conditionsToCall.GetRange(1, conditionsToCall.length);

        // Call next function in the "hierarchy" / list:
        CallDelegatesRecursively(restOfList, restOfConditions);
    }
}

现在它应该(理论上!;))可以调用该函数,并传递一个函数列表F,每个函数都在一个while循环中调用,只要有一些相应的条件C评估为真。在每次调用F之后,还会调用一些“子函数”F2(列表中的下一个)(但只有当它的相应条件C2在递归调用...)。