如何解决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:
变量同时枚举。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。