繁体   English   中英

将NSString的NSArray转换为NSMutableString的NSArray

[英]convert NSArray of NSString(s) to NSArray of NSMutableString(s)

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

我能想到的最好的是:

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]];

由于似乎没有人同意我的评论,即这是将NSNumbers的NSArray转换为NSStrings数组的更好方法的重复,因此再次提供相同的答案:

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

文档

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

- (id)valueForKey:(NSString *)key

参量
key检索的关键。

返回值
检索到的键的值。

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

我在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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM