如果我有一个嵌套在另一个循环中的for循环,我如何才能以最快的方式有效地从两个循环(内部和外部)中出来?
我不想必须使用布尔值然后必须说转到另一个方法,而只是在外部循环之后执行第一行代码。
有什么又快又好的方法呢?
我在想异常并不便宜/只应该在真正异常的情况下抛出等等。因此,从性能的角度来看,我不认为这个解决方案是好的。
我不认为利用。net中的新特性(anon方法)来做一些非常基础的事情是正确的。
如果我有一个嵌套在另一个循环中的for循环,我如何才能以最快的方式有效地从两个循环(内部和外部)中出来?
我不想必须使用布尔值然后必须说转到另一个方法,而只是在外部循环之后执行第一行代码。
有什么又快又好的方法呢?
我在想异常并不便宜/只应该在真正异常的情况下抛出等等。因此,从性能的角度来看,我不认为这个解决方案是好的。
我不认为利用。net中的新特性(anon方法)来做一些非常基础的事情是正确的。
当前回答
人们经常忘记for循环的第二个语句本身就是中断条件,所以在代码中没有必要有额外的if。
这样做是可行的:
bool run = true;
int finalx = 0;
int finaly = 0;
for (int x = 0; x < 100 && run; x++)
{
finalx = x;
for (int y = 0; y < 100 && run; y++)
{
finaly = y;
if (x == 10 && y == 50) { run = false; }
}
}
Console.WriteLine("x: " + finalx + " y: " + finaly); // outputs 'x: 10 y: 50'
其他回答
不要引用我的话,但你可以在MSDN中使用goto。还有其他解决方案,比如在两个循环的每次迭代中都检查一个标志。最后,您可以使用异常作为问题的重量级解决方案。
转到:
for ( int i = 0; i < 10; ++i ) {
for ( int j = 0; j < 10; ++j ) {
// code
if ( break_condition ) goto End;
// more code
}
}
End: ;
条件:
bool exit = false;
for ( int i = 0; i < 10 && !exit; ++i ) {
for ( int j = 0; j < 10 && !exit; ++j ) {
// code
if ( break_condition ) {
exit = true;
break; // or continue
}
// more code
}
}
例外:
try {
for ( int i = 0; i < 10 && !exit; ++i ) {
for ( int j = 0; j < 10 && !exit; ++j ) {
// code
if ( break_condition ) {
throw new Exception()
}
// more code
}
}
catch ( Exception e ) {}
你有没有看break关键字?有限责任
这只是伪代码,但你应该能明白我的意思:
<?php
for(...) {
while(...) {
foreach(...) {
break 3;
}
}
}
如果你认为break是一个类似break()的函数,那么它的参数就是要跳出的循环数。由于我们在代码的第三个循环中,我们可以跳出这三个循环。
手动:http://php.net/break
我就是这么做的。还是个变通办法。
Foreach (var子串中的子串){ //从第一个循环开始。 int断路器= 1; Foreach(子字符串中的字符c) { if (char.IsLetter(c)) { Console.WriteLine (line.IndexOf (c)); 设置从第一个循环中断的条件。 断路器= 9; 打破; } } If (break ==9) { 打破; } }
抛出一个自定义异常,该异常进入外循环。
它适用于for,foreach或while或任何类型的循环以及任何使用try catch异常块的语言
try
{
foreach (object o in list)
{
foreach (object another in otherList)
{
// ... some stuff here
if (condition)
{
throw new CustomExcpetion();
}
}
}
}
catch (CustomException)
{
// log
}
只要在内循环中使用return,两个循环就会被退出…