Ios 如何使用快速枚举修改NSArray的字符串元素?

Ios 如何使用快速枚举修改NSArray的字符串元素?,ios,objective-c,cocoa-touch,cocoa,nsarray,Ios,Objective C,Cocoa Touch,Cocoa,Nsarray,任何人都可以建议如何使用快速枚举来字符串NSArray的元素。用普通for循环也很容易做到这一点。下面的代码可以正常工作 _tempArray = [[NSMutableArray alloc] initWithObjects:@"A",@"B",@"C",@"D",@"E",@"F", nil]; NSUInteger i=0; for (; i<[_tempArray count]; i++) { if ([[_tempArray objectAtIndex:i] isEq

任何人都可以建议如何使用快速枚举来字符串NSArray的元素。用普通for循环也很容易做到这一点。下面的代码可以正常工作

_tempArray = [[NSMutableArray alloc] initWithObjects:@"A",@"B",@"C",@"D",@"E",@"F", nil];

NSUInteger i=0;
for (; i<[_tempArray count]; i++) {
     if ([[_tempArray objectAtIndex:i] isEqualToString:@"A"]) {
            [_tempArray replaceObjectAtIndex:i withObject:@"a"];
      }
}
如何使用快速枚举修改NSArray的字符串元素

不要。您不应该在枚举期间修改数组。这不是任意的限制——这样做可能会导致逻辑错误


如果要修改/转换数组,请改用显式索引for循环。

可以使用数组索引语法收紧代码:

for (int i=0; i<_tempArray.count; i++) {
    if ([_tempArray[i] isEqualToString:@"A"]) {
        _tempArray[i] = @"a";
    }
}

for(int i=0;i有效的代码有什么问题?你的最终目标是什么?也许你想使用
小写字母
@Wain,因为循环比正常情况下快,你的迭代有多大(以及每次迭代完成的工作量有多小)你需要担心吗?你已经分析过以证明这对你来说是一个瓶颈?这是未成熟的优化--不要这样做。以最干净、最简单、最清晰的方式编写代码,以理解这一点。然后,如果有问题,请使用分析工具找到真正的性能问题并加以解决。你不支持osed用于在枚举过程中修改数组元素。错误。你可以在枚举过程中更改数组中的任何对象,只要你不更改数组本身。而且你也不应该在循环过程中更改数组,因为可能会产生相同的后果。@vikingosegundo实际上,我的意思是不应该修改数组的结构,我的wordin至于你的第二条评论:不,如果你保持显式索引,并且你能跟踪数组大小,并且注意索引的正确使用(这是你不能用快速枚举的),那么修改数组就完全可以了。例如,否则您将如何实现排序算法?在线程环境中可能会出现问题。我会枚举一个副本,将其更改为原始。其中的一个变体是:反向枚举。
for (int i=0; i<_tempArray.count; i++) {
    if ([_tempArray[i] isEqualToString:@"A"]) {
        _tempArray[i] = @"a";
    }
}