什么是JS的`map()`函数的Objective-C等价物?

Mos*_*she 12 javascript porting objective-c

什么是JS的map()功能的Objective-C等价物?我会使用NSFastEnumeration并自己应用该功能吗?

mip*_*adi 36

如果您使用NSArrayenumerateObjectsUsingBlock:是OS X 10.6或iOS 4,则可以使用:

NSMutableArray *mapped = [NSMutableArray arrayWithCapacity:[array count]];
[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    id mapObj = DoSomethingToObject(obj);
    [mapped addObject:mapObj];
}];
Run Code Online (Sandbox Code Playgroud)

(无耻的,但相关的插件:我有一个为OS X和iOS,增加了地图和其他类似的功能NSArrayNSSet.)

  • +1表示集合库的链接.分享你的好工作,大声喊叫,不要_ashamed!它看起来像一个很好的资源. (7认同)

Dav*_*ong 12

这取决于.如果你有一个对象数组,并且这些对象有一个URL属性(例如),那么你可以这样做:

NSArray * urls = [myArray valueForKey:@"URL"];
Run Code Online (Sandbox Code Playgroud)

同样,如果您可以通过一条带有0或1个参数的消息触发相关对象的行为,则可以执行以下操作:

[myArray makeObjectsPerformSelector:@selector(doFoo)];
//or:
[myArray makeObjectsPerformSelector:@selector(doFooWithBar:) withObject:aBar];
Run Code Online (Sandbox Code Playgroud)

除此之外,你必须自己迭代对象.你可以使用for()循环,for(in)循环或类似的东西等-enumerateObjectsUsingBlock:.


Jon*_*pan 9

你自己做.没有一种方法等同于你想要的.

编辑:对于那些downvoting,这是当时(三年前)的正确答案,仍然是Objective-C,但Swift确实有一个map()功能.