首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在NSEnumerator迭代中获取当前对象的索引?

如何在NSEnumerator迭代中获取当前对象的索引?
EN

Stack Overflow用户
提问于 2010-05-19 21:06:00
回答 2查看 1.8K关注 0票数 3

问:如何在NSEnumerator迭代中获取当前对象的索引?

(由于速度的原因,我不想使用整数计数器或for循环来跟踪事情。我以前做过,我只是不记得我是怎么做的……)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-19 21:48:33

for循环中使用整数计数器是否会导致速度问题是值得怀疑的。尝试从枚举器中查找给定对象的索引比自己记录索引更有可能更慢。如果您想绕过重复的消息分派,可以看看NSArray的getObjects:range:方法。

代码语言:javascript
复制
size_t count = [myArray count];
id *objects = calloc(count, sizeof(id));

[myArray getObjects:objects range:NSMakeRange(0, count)];

// if you have a very large count, you'll save doing an
// "objectAtIndex:" for each item.

for (int i = 0; i < count; i++)
    [objects[i] doSomething];

free(objects);

对于非常大的数组,您可能只会看到很小的性能差异,但不要低估了幕后的优化。即使是getObjects:range:的文档也不鼓励将此技术用于此目的。

NSArray的indexOfObject:将遍历所有元素,直到从isEqual:消息返回YES (可能包括进一步的消息发送)。

票数 2
EN

Stack Overflow用户

发布于 2010-05-19 21:38:59

您正在请求一个索引,因此我们可以假定您正在使用一个数组。如果是这样的话:

代码语言:javascript
复制
[array indexOfObject:currentObject];

适用于大多数情况(但不是所有情况)。但是,总体来说,切换到使用带有int计数器的普通for循环会更快。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2865711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档