在嵌套的for循环中,我们如何从第二个循环返回第一个循环?

时间:2012-02-21 16:01:26

标签: objective-c c for-loop

我有2个循环,如下面的代码:

for(NSString *link in pageLinks){

    for(NSString *pattern in disallowedPattern){

        if (range.location != NSNotFound )
           // if condition is yes go back to the first loop.
    }

}

如果条件为是,我希望程序返回第一个循环。我使用continue,但它只返回第二个循环。解决方案是什么?

3 个答案:

答案 0 :(得分:7)

break就是你想要的。它将终止当前循环,在您的情况下,返回第一个循环。

答案 1 :(得分:3)

您应该使用breakcontinue关键字只是重启当前循环。 (在for循环中,continue将在重新启动之前执行增量。)

答案 2 :(得分:2)

内循环中的break;在内循环后立即恢复外循环。

for (NSString *link in pageLinks)
{
    for (NSString *pattern in disallowedPattern)
    {
        if (range.location != NSNotFound) 
            break;
    }
    ...execution continues here after break is executed...
}

评论中潜伏着一个问题:

  

这正是我得到的另一个问题; [我想在第二个for循环之后跳过]'某事';有没有解决这个问题?

我希望我已经正确地解释了它。至少有两种可能性。您选择哪一部分取决于您对goto陈述的态度。

(使用goto

    for (NSString *link in pageLinks)
    {
        for (NSString *pattern in disallowedPattern)
        {
            if (range.location != NSNotFound) 
                goto end_of_outer_loop;
        }
        ...other code to be executed if the loop terminates...
end_of_outer_loop: ;    // Null statement after the colon
    }

或(没有goto

    for (NSString *link in pageLinks)
    {
        bool found = false;
        for (NSString *pattern in disallowedPattern)
        {
            if (range.location != NSNotFound)
            {
                found = true; 
                break;
            }
        }
        if (!found)
        {
            ...other code to be executed if the loop terminates...
        }
    }

两者都有效;两者都相当清楚。这主要是你选择的味道问题。