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

问题描述:

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

我有一个NSArray与40个对象。索引等于另一个NSArray中指定的数字的那些对象(例如,{0,27,36}))返回的最有效方法是什么?

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

为什么不只是遍历索引数组,并查找数据数组中的每个索引,用查找的对象替换索引。

最后,保存索引的数组现在拥有对象。如果您不想清除索引数组,则只需创建一个与索引数组大小相同的新数组,然后将对象放在那里。

你可能会过度思考这个问题的设计,并且会陷入微观优化。 (这是一件坏事。)

+0

我只是认为可能有一个简单的单行(例如NSArray filterByIndexes:self.IndexNumbers)。可以随时添加这个作为NSArray和NSMutableArray的类别...但我不想重新发明轮子(如果确实已经存在) – wgpubs 2010-04-14 20:21:30

我记得有一次读过,我不能说在哪里,但它卡在我的脑海里,如果这是你需要做很多次的事情,并且数组相当大是一种更有效的方式。您可以从该数组中创建一个新的字典,其中每个条目都有索引号的键,值是数组项。你只创建一次字典,所以艰苦的工作一下子就结束了。然后每次需要访问某些索引的值时,只需要输入valueForKey:@“indexNumber”。但是我从来没有这样的需求,所以我从来没有测试过,如果它从长远来看效率更高......这只是一个想法。

有一种方法(objectsAtIndexes)用于从原始数组返回指定索引,但它需要一个NSIndexSet作为其参数,并且没有内置方法可将索引数组转换为索引集。从积极的一面,你可以生成一个短回路设置索引,如下所示:

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

这是任何不是简单地通过原始数组循环更有效率?我不知道。你将不得不分析你的应用程序,以确保。