NSArray的。如何实现Map功能?

时间:2012-04-05 14:03:09

标签: objective-c ios nsarray mapreduce

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

谢谢,
道格

3 个答案:

答案 0 :(得分:6)

您可以使用NSArray的{​​{3}}功能。

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

答案 1 :(得分: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

答案 2 :(得分:0)

如果您使用的是Objective-C,则只需使用以下方法:

- (void)makeObjectsPerformSelector:(SEL)aSelector;
- (void)makeObjectsPerformSelector:(SEL)aSelector withObject:(nullable id)argument;

例如:

[array makeObjectsPerformSelector:@selector(doSomething)];