正如标题所说,是否有一种方法可以非递归地循环循环嵌套?也就是说,我想说我想这样做:
while (condition)
{
while (condition)
{
while (condition)
{
.... //<- more whiles
}
}
}
有100个嵌套的while循环。有没有办法在没有硬编码和不使用递归的情况下做到这一点?
编辑:为了清楚起见,100用于演示目的。
答案 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
在递归调用...)。