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

Den*_*er9 0 iphone collections objective-c nsarray ios

有没有一种简单的方法可以对数组中的一系列对象进行快速枚举?就像是...

for (Object *object in myArray startingAtIndex:50) {
    //do stuff
}
Run Code Online (Sandbox Code Playgroud)

......为了避免做这样的事......

for (Object *object in myArray) {
    NSUInteger index = [myArray indexOfObject:object];
    if (index >= 50) {
        //do stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

bbu*_*bum 6

如果myArray是不可变的,那么subArrayWithRange: 可能不会复制指针,尽管retain 可能仍然需要发送到子数组中的所有内容.

总的来说,这没关系.我老实说从来没有见过快速枚举与indexOfObject:足以引起注意的性能问题的情况(总是存在更糟糕的情况.:).

另一种方法; 使用enumerateBlock:并简单地从索引返回游侠(并使用停止标志).

[myArray enumerateWithBlock: ^(id o, NSUInteger i, BOOL *f) {
   if (i < 10) return;
   if (i > 20) { *f = YES; return; }
   ... process objects in range ...
}];
Run Code Online (Sandbox Code Playgroud)

(你甚至可以使用options:变量同时枚举.)


Reg*_*ent 5

我想到了这些:

for (Object *object in [myArray subArrayWithRange:NSMakeRange(50, ([myArray count] - 49))]) {
    //do stuff
}
Run Code Online (Sandbox Code Playgroud)

这会创建一个临时数组,因此可能比这样的手动枚举更慢(基准测试!):

NSUInteger arrayCount = [myArray count];
for (NSUInteger i = 50; i < arrayCount; i++) {
    Object *object = [myArray objectAtIndex];
    // do stuff
}
Run Code Online (Sandbox Code Playgroud)