从所需级别的嵌套循环退出
本文关键字:嵌套循环 退出 | 更新日期: 2023-09-27 17:57:02
可能的重复项:
打破嵌套循环
如何从特定级别的嵌套循环退出。例如:
foreach (item in Items)
{
foreach (item2 in Items2)
{
// Break; => we just exit the inner loop
// while we need to break both loops.
}
}
如果有更多的嵌套循环,我们想从内部退出第 N 个循环。类似于上面的例子break(2)
,它打破了两个循环。
我能想到的两个选项:
(1)在脱离第二个循环之前,在第二个循环内设置一个标志。跟随内部迭代,如果设置了标志,则条件从第一次迭代中分离出来。
bool flag = false;
foreach (item in Items)
{
foreach (item2 in Items2)
{
flag = true; // whenever you want to break
break;
}
if (flag) break;
}
(2) 使用 goto 语句。
foreach (item in Items)
{
foreach (item2 in Items2)
{
goto GetMeOutOfHere: // when you want to break out of both
}
}
GetMeOutOfHere:
// do whatever.
总是有可怕的(而且很诋毁?
编辑:在考虑了一段时间之后,我想到你可以使用 Linq 来做到这一点,假设满足一些条件。
var query = from item in items
from item2 in items2
select new { item, item2 };
foreach (var tuple in query)
{
//...
break;
}
不过,您可以在 F# 中更优雅地执行此操作。
这在
这篇文章之前已经讨论过:
打破嵌套循环
简短回答:使用单个关键字真的是不可能的。您必须使用一些标志逻辑进行编码(如另一个问题的答案中所建议的那样)。
我个人会将其拆分为单独的方法,将循环"块"放在函数中并返回(从而破坏两个循环)对您有用吗?