如何停止快速枚举?

6

当你找到所需的内容后,如何停止快速枚举。

在for循环中,你可以将计数器设置为一个较大的数字,例如1000。

for (int i=0;i<10;i++){
    if (random requirement){
        random code
        i=1000;
    }
}

如果不将快速枚举转换为前向循环类型(通过将i与[array count]进行比较),那么如何在过程中停止快速枚举?


5
使用 break; 语句。在普通的 for 循环中也可以使用它们。 - Dustin
3
谁让你“重置索引变量”以停止“for”循环的?!我们将不得不暂停他们的编程许可证。 - jscs
3
好的,你现在完成了再教育过程,你的许可证状态已经恢复良好。欢迎回来。/半开玩笑地说实际上,你自己想出来更好——如果你不知道“break”语句,那就相当聪明。 - jscs
1
这种方法并不是很糟糕,因为它类似于跳出最通用的循环——while循环。 - vikingosegundo
2
我的意思是,这是最基本的一个。你可以把每个for循环写成while循环或者do-while循环。 - vikingosegundo
显示剩余2条评论
4个回答

11

从文档中获取

for (NSString *element in array) {
    if ([element isEqualToString:@"three"]) {
        break;
    }
}

如果想要在达到特定索引时结束枚举,基于块的枚举可能更好,因为它在枚举时提供了索引:

[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    //…
    if(idx == 1000) 
        *stop = YES;
}];

4
它们在苹果的API中非常重要并且变得越来越受欢迎。你应该熟悉它们。 - vikingosegundo

2
for (id object in collection) {
  if (condition_met) {
    break;
  }
}

1

你不能只使用一个break语句吗?

for (int x in /*your array*/){
    if (random requirement){

        random code
        break;
    }
}

1

对于嵌套循环,内部循环的中断只会中断该循环。外部循环将继续执行。如果您想完全中断,请按以下方式操作:

BOOL flag = NO;
for (NSArray *array in arrayOfArrays) {
    for (Thing *thing in array) {
        if (someCondition) {
            // maybe do something here
            flag = YES;
            break;
        }
    }
    if (flag) {
        break;
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接