将NSString的NSArray转换为NSMutableString(s)的NSArray

时间:2011-11-17 16:35:54

标签: objective-c nsstring nsarray

如何做到这一点,而不必用“for”循环“滚动”整个给定的数组?

3 个答案:

答案 0 :(得分:4)

我能想到的最好的是:

NSMutableArray *replacementArray = [NSMutableArray array];

[originalArray enumerateObjectsUsingBlock:
     ^(id obj, NSUInteger index, BOOL *stop)
     {
          [replacementArray addObject:[[obj mutableCopy] autorelease]];
     }
];

或多或少只是告诉originalArray为你构造for循环。如果有什么比它更有效:

NSMutableArray *replacementArray = [NSMutableArray array];

for(id obj in originalArray)
   [replacementArray addObject:[[obj mutableCopy] autorelease]];

答案 1 :(得分:3)

由于似乎没有人同意我的评论,这是Better way to convert NSArray of NSNumbers to array of NSStrings的副本,所以再次给出相同的答案:

NSArray * arrayOfMutableStrings = [arrayOfStrings valueForKey:@"mutableCopy"];

来自docs

  

valueForKey:
  返回包含调用结果的数组   valueForKey:在每个数组的对象上使用key

     

- (id)valueForKey:(NSString *)key

     

<强>参数
  key要检索的密钥。

     

返回值
  检索到的密钥的值。

     

<强>讨论
  返回的数组包含返回NSNull的每个对象的nil个元素。

答案 2 :(得分:1)

我在NSArray上写了一个字典方法,以便能够编写更清晰的功能代码

-(NSArray *)arrayByPerformingBlock:(id (^)(id))performBlock 
{
    NSMutableArray *array = [NSMutableArray array];
    for (id element in self)
         [array addObject:performBlock(element)];
    return [NSArray arrayWithArray:array];
}

用法:

arrayWithStrings = [arrayWithStrings arrayByPerformingBlock:^id(id element) {return [[element mutableCopy] autorelease];}];

这是我从Python中了解的列表理解的启发。我还用测试编写了这个方法的版本。查看我的arraytools