是否有一种简单的方法可以对数组中的一系列对象进行快速枚举?有点像...
for (Object *object in myArray startingAtIndex:50) {
//do stuff
}
......避免做这样的事......
for (Object *object in myArray) {
NSUInteger index = [myArray indexOfObject:object];
if (index >= 50) {
//do stuff
}
}
感谢。
答案 0 :(得分: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 ...
}];
(您甚至可以使用options:
变体同时枚举。)
答案 1 :(得分:5)
我想到了这些:
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
}