用单个对象替换多个数组内容?
问题描述:
我有一个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];
}
}
答
您可以使用for
循环。从第一个索引开始,使用indexGreaterThanIndex:
获取下一个索引,并在您点击最后一个索引后停止。
不要忘记考虑一个空的索引集。在这种情况下,第一个和最后一个索引将是NSNotFound
。最简单的方法是测试索引集的计数;如果它是零,不要循环。
另外,Jason Coco关于分析的说法。在你的程序运行之前,不要过分担心效率问题,在你运行Shark(或者仪器,如果那是你的东西)之前不要去优化它,并且确切地发现什么是慢的。
+0
感谢您的提示。我会尝试对此进行基准测试,看看新方法是否更快。 – hyn 2009-04-12 08:11:19
答
我意识到这是一个非常古老的问题,但我在这里发帖的情况下,任何人都发现了这个问题,你可以使用:
[indexes enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL *stop) {
NSLog(@"index: %d", idx);
[objectArray replaceObjectAtIndex:idx
withObject:newObject];
}];
这是很多更简洁。
这是行为效率低下吗?即在分析应用程序时,您看到此代码片段中的大幅减速? – 2009-04-12 06:48:07