Как во вложенном цикле for мы можем вернуться к первому циклу из второго цикла? - PullRequest
1 голос
/ 21 февраля 2012

У меня есть 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 ]

7 голосов
/ 21 февраля 2012

break - это то, что вы хотите. Он прервет токовую петлю и, в вашем случае, вернется к первой.

3 голосов
/ 21 февраля 2012

Вы должны использовать break.Ключевое слово continue просто перезапускает текущий цикл.(В for циклах continue будет делать приращение перед перезапуском.)

2 голосов
/ 21 февраля 2012

A 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...
        }
    }

Обе работы; оба достаточно ясны. Это в основном дело вкуса, который вы выбираете.

...