1

我有一个NSMutableArray我想用NSNull对象替换的内容。

这就是我所做的:

NSMutableArray* nulls = [NSMutableArray array];

for (NSInteger i = 0; i < myIndexes.count; i++)
    [nulls addObject:[NSNull null]];

[stageMap replaceObjectsAtIndexes:myIndexes withObjects:nulls];

我怎样才能更有效地做到这一点?有没有办法枚举一个NSIndexSet,这样我就可以一一替换数组内容了?

解决了

建议的方法结果是 2 倍快(平均 0.000565s 与 0.001210s):

if (myIndex.count > 0)
{
    NSInteger index = [myIndex firstIndex];

    for (NSInteger i = 0; i < myIndex.count; i++)
    {
        [stageMap replaceObjectAtIndex:index withObject:[NSNull null]];
        index = [myIndex indexGreaterThanIndex:index];
    }
}
4

2 回答 2

1

您可以使用for循环。从第一个索引开始,indexGreaterThanIndex:用于获取下一个索引,并在到达最后一个索引后停止。

不要忘记考虑空索引集。第一个和最后一个索引都将NSNotFound在这种情况下。最简单的方法是测试索引集的计数;如果为零,则不要循环。

此外,Jason Coco 谈到了剖析。在您的程序运行之前不要太担心效率,并且在您运行 Shark(或 Instruments,如果那是您的事情)并确切地发现什么是慢的之前不要去优化事情。

于 2009-04-12T07:27:33.143 回答
0

我意识到这是一个非常古老的问题,但我在这里发布以防其他人发现您可以使用的这个问题:

    [indexes enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL *stop) {
        NSLog(@"index: %d", idx);
        [objectArray replaceObjectAtIndex:idx 
                               withObject:newObject];
    }];

这更简洁。

于 2012-07-03T21:07:53.293 回答