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

时间:2010-04-14 20:11:10

标签: objective-c nsarray

示例:

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

可以在这里使用谓词吗?或者是否有更简单有效的方法?

3 个答案:

答案 0 :(得分:3)

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

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

你可能会过度思考这种设计并成为微优化的牺牲品。 (这是件坏事。)

答案 1 :(得分:3)

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

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

这比简单地循环原始数组更有效吗?我不知道。您必须要确定自己的应用内容。

答案 2 :(得分:0)

我记得曾经读过一次,而且我不知道在哪里,但它一直困在我的脑海里,如果这是你需要做很多次的事情而且阵列相当大,那么就会有更有效的方法。您可以从该数组创建一个新字典,其中每个条目都具有索引号的键,值为数组项。您只需创建一次字典,以便一次性完成艰苦的工作。然后,每当您需要访问某些索引的值时,您只需要valueForKey:@“indexNumber”。但我从来没有这样的需要所以我从未测试过它从长远来看是否更有效......这只是一个想法。