Подтвердить что ты не робот

Ios разрыв вложенной петли

Если у меня есть цикл while с циклом for внутри цикла while, как я могу break обе петли?

Я делаю это, потому что дополнительные 250 мс, которые я получаю от завершения этих циклов после того, как я нашел то, что я хочу, могут быть полезными через некоторое время.

псевдокод:

while(alwaysTrue) {
    for(NSArray *arr in twoThousandItems) {
        if(IFoundWhatIWasLookingFor) {
            // assign some stuff here
            // break everything, not just the for loop.
        }
    }
}
4b9b3361

Ответ 1

Здесь goto - ваш друг. Да, это goto.

while(alwaysTrue) {
    for(NSArray *arr in twoThousandItems) {
        if(IFoundWhatIWasLookingFor) {
            // assign some stuff here
            // break everything, not just the for loop.
            goto BAIL;
        }
    }
}
BAIL:
NSLog(@"Freedom!");

Другой вариант - иметь короткие контуры в ваших циклах.

while(alwaysTrue && !found) {
    for(NSArray *arr in twoThousandItems) {
        if(IFoundWhatIWasLookingFor) {
            // assign some stuff here
            // break everything, not just the for loop.
            found = YES;
            break;
        }
    }
}

Ответ 2

Это один из способов. Это применимая техника для других вариантов C и других языков.

bool breakOuterLoop = false;
while(!breakOuterLoop)
{
    for(NSArray *arr in twoThousandItems)
    {
        if(IFoundWhatIWasLookingFor)
        {
            // assign some stuff here
            breakOuterLoop = true;
            break;
        }
    }
}