如何做到这一点,而不必用“for”循环“滚动”整个给定的数组?
答案 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。