如果我有一个嵌套在另一个循环中的for循环,我如何才能以最快的方式有效地从两个循环(内部和外部)中出来?

我不想必须使用布尔值然后必须说转到另一个方法,而只是在外部循环之后执行第一行代码。

有什么又快又好的方法呢?

我在想异常并不便宜/只应该在真正异常的情况下抛出等等。因此,从性能的角度来看,我不认为这个解决方案是好的。

我不认为利用。net中的新特性(anon方法)来做一些非常基础的事情是正确的。


当前回答

自从几十年前我第一次看到C语言中的break,这个问题就一直困扰着我。我希望一些语言增强会有一个扩展打破,这样工作:

break; // our trusty friend, breaks out of current looping construct.
break 2; // breaks out of the current and it's parent looping construct.
break 3; // breaks out of 3 looping constructs.
break all; // totally decimates any looping constructs in force.

其他回答

我就是这么做的。还是个变通办法。

Foreach (var子串中的子串){ //从第一个循环开始。 int断路器= 1; Foreach(子字符串中的字符c) { if (char.IsLetter(c)) { Console.WriteLine (line.IndexOf (c)); 设置从第一个循环中断的条件。 断路器= 9; 打破; } } If (break ==9) { 打破; } }

是否有可能将嵌套的for循环重构为私有方法?这样你就可以简单地从方法中“返回”以退出循环。

我认为除非你想做“布尔的事情”,否则唯一的解决方案实际上是抛出。你显然不应该这么做!

正如我看到你接受了这个人提到你的goto语句的答案,在现代编程中,在专家看来,goto是一个杀手,我们称它为编程中的杀手,这是有一定原因的,我不会在这里讨论它,但你的问题的解决方案非常简单,你可以在这种情况下使用一个布尔标志,就像我将在我的例子中演示的那样:

            for (; j < 10; j++)
            {
                //solution
                bool breakme = false;
                for (int k = 1; k < 10; k++)
                {
                   //place the condition where you want to stop it
                    if ()
                    {
                        breakme = true;
                        break;
                    }
                }

                if(breakme)
                    break;
               }

简单明了。:)

你有没有看break关键字?有限责任

这只是伪代码,但你应该能明白我的意思:

<?php
for(...) {
    while(...) {
        foreach(...) {
            break 3;
        }
    }
}

如果你认为break是一个类似break()的函数,那么它的参数就是要跳出的循环数。由于我们在代码的第三个循环中,我们可以跳出这三个循环。

手动:http://php.net/break