diff --git a/Underscore/USArrayWrapper.h b/Underscore/USArrayWrapper.h index 0ff0b18..03a463a 100644 --- a/Underscore/USArrayWrapper.h +++ b/Underscore/USArrayWrapper.h @@ -58,6 +58,7 @@ @property (readonly) USArrayWrapper *(^each)(UnderscoreArrayIteratorBlock block); @property (readonly) USArrayWrapper *(^map)(UnderscoreArrayMapBlock block); @property (readonly) USArrayWrapper *(^zipWith)(NSArray *array, UnderscoreArrayZipWithBlock block); +@property (readonly) USArrayWrapper *zip; @property (readonly) USArrayWrapper *(^pluck)(NSString *keyPath); diff --git a/Underscore/USArrayWrapper.m b/Underscore/USArrayWrapper.m index bed29c0..e2106f8 100644 --- a/Underscore/USArrayWrapper.m +++ b/Underscore/USArrayWrapper.m @@ -243,6 +243,19 @@ - (USArrayWrapper *)shuffle }; } +- (USArrayWrapper *)zip +{ + int length = (int)[self.first count]; + NSMutableArray *finalMutableArray = [NSMutableArray arrayWithCapacity:length * self.array.count]; + for (NSUInteger index = 0; index < length; index++) { + USArrayWrapper *wrapper = self.map(^id (id obj) { + return [obj objectAtIndex:index]; + }); + [finalMutableArray addObject:wrapper.unwrap]; + } + return [[USArrayWrapper alloc] initWithArray:finalMutableArray]; +} + - (USArrayWrapper *(^)(NSString *))pluck { return ^USArrayWrapper *(NSString *keyPath) { diff --git a/Underscore/Underscore+Functional.h b/Underscore/Underscore+Functional.h index be33343..1696f92 100644 --- a/Underscore/Underscore+Functional.h +++ b/Underscore/Underscore+Functional.h @@ -52,7 +52,7 @@ + (void (^)(NSArray *array, UnderscoreArrayIteratorBlock block))arrayEach; + (NSArray *(^)(NSArray *array, UnderscoreArrayMapBlock block))arrayMap; + (NSArray *(^)(NSArray *firstArray, NSArray *secondArray, UnderscoreArrayZipWithBlock block))arrayZipWith; - ++ (NSArray *(^)(NSArray *))zip; + (NSArray *(^)(NSArray *array, NSString *keyPath))pluck; + (NSArray *(^)(NSArray *array))uniq; diff --git a/Underscore/Underscore+Functional.m b/Underscore/Underscore+Functional.m index 7e28542..1086ad9 100644 --- a/Underscore/Underscore+Functional.m +++ b/Underscore/Underscore+Functional.m @@ -142,6 +142,13 @@ @implementation Underscore (Functional) }; } ++ (NSArray *(^)(NSArray *))zip +{ + return ^(NSArray *array) { + return Underscore.array(array).zip.unwrap; + }; +} + + (NSArray *(^)(NSArray *, NSString *))pluck { return ^(NSArray *array, NSString *keyPath) {