Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 是否用单个对象替换多个数组内容?_Objective C_Cocoa Touch_Cocoa_Nsmutablearray - Fatal编程技术网

Objective c 是否用单个对象替换多个数组内容?

Objective c 是否用单个对象替换多个数组内容?,objective-c,cocoa-touch,cocoa,nsmutablearray,Objective C,Cocoa Touch,Cocoa,Nsmutablearray,我有一个NSMutableArray,其中包含要替换为NSNull对象的内容 我就是这么做的: NSMutableArray* nulls = [NSMutableArray array]; for (NSInteger i = 0; i < myIndexes.count; i++) [nulls addObject:[NSNull null]]; [stageMap replaceObjectsAtIndexes:myIndexes withObjects:nulls];

我有一个
NSMutableArray
,其中包含要替换为
NSNull
对象的内容

我就是这么做的:

NSMutableArray* nulls = [NSMutableArray array];

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

[stageMap replaceObjectsAtIndexes:myIndexes withObjects:nulls];
NSMutableArray*nulls=[NSMutableArray];
对于(NSInteger i=0;i
我怎样才能更有效地做到这一点? 是否有方法枚举NSIndexSet,以便逐个替换数组内容

解决

建议的方法快2倍(平均0.000565s比0.001210s):

if(myIndex.count>0)
{
NSInteger index=[myIndex firstIndex];
对于(NSInteger i=0;i
您可以为
循环使用
。从第一个索引开始,使用
索引greaterthanindex:
获取下一个索引,并在点击最后一个索引后停止

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


还有,Jason Coco对评测的看法。在程序运行之前不要太担心效率,在运行Shark(或Instruments,如果你喜欢的话)并准确找到慢的地方之前不要去优化事情。

你可以使用
进行
循环。从第一个索引开始,使用
索引greaterthanindex:
获取下一个索引,并在点击最后一个索引后停止

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


还有,Jason Coco对评测的看法。在你的程序运行之前不要太担心效率,在你运行Shark(或Instruments,如果你喜欢的话)并准确发现什么是慢的之前不要去优化东西。

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

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

这要简洁得多。

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

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

哪一个更简洁。

这是不是行为效率低下?i、 例如,当你评测你的应用程序时,你是否看到这个代码片段中有很大的减速?这是不是表现得很低效?i、 例如,当你评测你的应用程序时,你是否在这个代码片段中看到了很大的减速?谢谢你的提示。我将尝试对其进行基准测试,看看新方法是否更快。谢谢你的提示。我将尝试对此进行基准测试,看看新方法是否更快。