NSArray的.如何实现Map功能?

dug*_*gla 9 mapreduce objective-c nsarray ios

在iOS中,我想为NSArray实现map函数.这是一个应用于数组的每个元素的函数.实现这个的最佳方法是什么?

谢谢,
道格

das*_*ght 6

你可以使用的enumerateObjectsUsingBlock:功能NSArray.

[myArray enumerateObjectsUsingBlock:^(id x, NSUInteger index, BOOL *stop) {
    // Body of the function
}];
Run Code Online (Sandbox Code Playgroud)

  • 为什么这是赢家.map函数应该返回一个新数组,其中块的每个元素都被作用.enumerateObjectsUsingBlock返回void. (27认同)

小智 6

您正在寻找apply as map应该返回一个包含转换值的新数组.

但是,您可以通过创建自定义类别来使用您查找的方法扩充NSArray.这里有两个例子 - apply和map:

@implementation NSArray (CMMap)
- (NSArray *) map:(id(^)(id obj))block {
    NSMutableArray *a = @[].mutableCopy;
    for (id o in self) {
        id on = block(o);
        if (!on) {
            NSLog(@"NSArray::map() - object returned by block is nil!");
            abort();
        }
        [a addObject: on];
    }
    return [NSArray arrayWithArray: a];
}

- (void) apply:(void(^)(id obj))block {
    for (id o in self) {
        block(o);
    }
}
@end
Run Code Online (Sandbox Code Playgroud)