Objective-C-数组子集的快速枚举?

问题描述

| 有没有一种简单的方法可以对数组中的一系列对象进行快速枚举?就像是...
for (Object *object in myArray startingAtIndex:50) {
    //do stuff
}
...避免做这样的事情...
for (Object *object in myArray) {
    NSUInteger index = [myArray indexOfObject:object];
    if (index >= 50) {
        //do stuff
    }
}
谢谢。     

解决方法

        这些浮现在我脑海:
for (Object *object in [myArray subArrayWithRange:NSMakeRange(50,([myArray count] - 49))]) {
    //do stuff
}
但这会创建一个临时数组,因此可能比手动枚举要慢(将其标记为基准!),如下所示:
NSUInteger arrayCount = [myArray count];
for (NSUInteger i = 50; i < arrayCount; i++) {
    Object *object = [myArray objectAtIndex];
    // do stuff
}
    ,        如果
myArray
是不可变的,那么
subArrayWithRange:
可能不会复制指针,尽管
retain
可能仍必须发送到子数组中的所有内容。 总体而言,这并不重要。老实说,我从来没有见过快速枚举与en7ѭ足以引起性能问题以引起注意的情况(总有一些更糟的事情。:)。 另一种方法;使用
enumerateBlock:
并简单地从超出范围的索引中返回(并使用停止标志)。
[myArray enumerateWithBlock: ^(id o,NSUInteger i,BOOL *f) {
   if (i < 10) return;
   if (i > 20) { *f = YES; return; }
   ... process objects in range ...
}];
(您甚至可以使用
options:
变量同时枚举。)