MacOSX 10.6 以上ないしは、iOS4.0 以上(3.0以上?)でしかできないけど、NSArray に map関数の実装。
NSArrayのドキュメント見ても意外となかったので、即興で書いてみた。
テストあんまりしてないから自信ない。
NSArray+Map.h
// // NSArray+Map.h // kisa // // Created by 安井 惇 on 10/11/28. // Copyright 2010 __MyCompanyName__. All rights reserved. // #import <Foundation/Foundation.h> typedef NSObject* (^NSArrayMap)(NSObject*); @interface NSArray (Map) - (NSArray*) map:(NSArrayMap)mapblock; @end
NSArray+Map.m
// // NSArray+Map.m // kisa // // Created by 安井 惇 on 10/11/28. // Copyright 2010 __MyCompanyName__. All rights reserved. // #import "NSArray+Map.h" @implementation NSArray (Map) - (NSArray*) map:(NSArrayMap)mapblock { NSMutableArray* arr = [[NSMutableArray alloc] initWithCapacity:[self count]]; NSArray* result = nil; for (NSObject* obj in self) { [arr addObject:mapblock(obj)]; } result = [NSArray arrayWithArray:arr]; [arr release]; return result; } @end
使用例
// arr = [ {'first': 'test', 'last': 'abc'}, {'first': 'hoge', 'last': 'huge'}, {'first': 'panda', 'last': 'kopanda'} ]; NSArray* huge = [arr map:^(NSObject*obj){ return (NSObject*)[(NSDictionary*)obj objectForKey:@"first"]; }]; // huge = ['test', 'hoge', 'panda'];