如何在指定的索引处返回NSArray中的对象?

3

例子:

我有一个包含40个对象的NSArray。如何最有效地返回仅与另一个NSArray中指定数字相等的索引相同的对象(例如{0,27,36})?

这里可以使用谓词吗?还是有更简单和高效的方法?

3个回答

3

有一个方法 (objectsAtIndexes) 可以返回原始数组中指定的索引,但它需要一个 NSIndexSet 作为参数,并且没有内置的方法将您的索引数组转换为索引集。好消息是,您可以通过以下简短的循环生成索引集:

NSMutableIndexSet indexes = [NSMutableIndexSet indexSet];
for (NSNumber * number in indexArray)
{
    [indexes addIndex:[number intValue]];
}
return [originalArray objectsAtIndexes:indexes];

这种方法是否比直接遍历原始数组更有效?我不确定。你需要对你的应用进行性能分析才能确定。


3
为什么不直接遍历索引数组,然后在数据数组中查找每个索引并将其替换为所查找的对象。
最终,原先保存索引的数组现在保存了对象。如果你不想清空你的索引数组,那么只需创建一个与索引数组相同大小的新数组,并将对象放入其中。
你可能过于考虑这个设计,陷入微观优化的困境。(这是一件坏事。)

我只是想可能有一个简单的一行代码(例如NSArray filterByIndexes:self.IndexNumbers)。可以将其添加为NSArray和NSMutableArray的类别...但我不想重新发明轮子(如果它已经存在的话)。 - wgpubs

0

我记得曾经读过一次,虽然我不能说在哪里,但它却深深地印在了我的脑海中。如果这是你需要多次执行的操作,并且数组相当大,那么有一种更有效的方法。你可以从该数组创建一个新的字典,其中每个条目都具有索引号作为键,数组项作为值。你只需创建一次字典,因此一次性完成了所有的繁重工作。然后,每次您需要访问特定索引处的值时,只需请求 valueForKey:@"indexNumber"。但我从未有过这样的需求,所以我从未测试过它是否在长期运行中更有效...这只是一个想法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接