我有一个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 vs 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];
}
}
答案 0 :(得分:1)
您可以使用for
循环。从第一个索引开始,使用indexGreaterThanIndex:
获取下一个索引,并在达到最后一个索引后停止。
不要忘记考虑空索引集。在这种情况下,第一个和最后一个索引都是NSNotFound
。最简单的方法是测试索引集的计数;如果它为零,则不要循环。
此外,Jason Coco所说的关于剖析的内容。在你的程序运行之前不要太担心效率,并且在你运行Shark(或者仪器,如果这是你的东西)之前不要去优化,并找到确切的慢速。
答案 1 :(得分:0)
我意识到这是一个非常古老的问题,但我在这里张贴以防其他人发现你可以使用这个问题:
[indexes enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL *stop) {
NSLog(@"index: %d", idx);
[objectArray replaceObjectAtIndex:idx
withObject:newObject];
}];
这更简洁。