NSEnumeratorLinq 0.2.7

NSEnumeratorLinq 0.2.7

测试已测试
Lang语言 Obj-CObjective C
许可 MIT
发布最新版本2014年12月

由 Anton Bukov 维护。Anton Bukov



  • Anton Bukov

只需想象 LINQ 在 iOS 和 OS X 平台上的强大功能。

停止说话,给我看看代码…

带有过滤、转换和另一个过滤数组的示例

NSArray * arr = @[@1,@2,@3,@4,@5,@6,@7,@8];
NSArray * subarr = [[[[[arr objectEnumerator]                                // 1,2,3,4,5,6,7,8
                    where:^(id a){return [a intValue]%2 == 1}]               // 1,3,5,7
                    select:^(id a){return @([a intValue]*2)}]                // 2,6,10,14
                    where:^(id a){return [a intValue]>2 && [a intValue]<12}] // 6,10
                    allObjects];

主要目标

主要目标是实现以下方法: http://msdn.microsoft.com/en-us/library/system.linq.enumerable_methods.aspx

实现功能

主要方法

- (NSEnumerator *)where:(BOOL (^)(id object))predicate;
- (NSEnumerator *)where_i:(BOOL (^)(id object,int index))predicate;
- (NSEnumerator *)select:(id (^)(id object))predicate;
- (NSEnumerator *)select_i:(id (^)(id object,int index))predicate;
- (NSEnumerator *)select_parallel:(id (^)(id object))func;
- (NSEnumerator *)select_parallel:(id (^)(id object))func
                         priority:(long)priority;
- (NSEnumerator *)distinct;
- (NSEnumerator *)distinct:(id<NSCopying> (^)(id object))func;
- (NSEnumerator *)ofType:(Class) type;

- (NSEnumerator *)skip:(NSInteger)count;
- (NSEnumerator *)skipWhile:(BOOL (^)(id object))predicate;
- (NSEnumerator *)take:(NSInteger)count;
- (NSEnumerator *)takeWhile:(BOOL (^)(id object))predicate;

- (NSEnumerator *)groupBy:(id<NSCopying> (^)(id object))keySelector;
- (NSEnumerator *)splitBy:(id<NSCopying> (^)(id object))keySelector;
- (NSEnumerator *)selectMany:(NSEnumerator * (^)(id object))func;

- (NSEnumerator *)orderBy:(id (^)(id object))func
               comparator:(NSComparisonResult(^)(id obj1, id obj2))objectComparator;
- (NSEnumerator *)orderByDescending:(id (^)(id object))func
                         comparator:(NSComparisonResult(^)(id obj1, id obj2))objectComparator;
- (NSEnumerator *)orderBy:(id (^)(id object))func;
- (NSEnumerator *)orderByDescending:(id (^)(id object))func;

聚合器

- (id)aggregate:(id (^)(id accumulator,id object))func initValue:(id)value;
- (BOOL)all;
- (BOOL)all:(BOOL (^)(id object))predicate;
- (BOOL)any;
- (BOOL)any:(BOOL (^)(id object))predicate;
- (BOOL)none;
- (BOOL)none:(BOOL (^)(id object))predicate;
- (BOOL)contains:(id)object;
- (BOOL)containsObject:(id)object;
- (NSInteger)count;
- (NSInteger)count:(BOOL (^)(id object))predicate;
- (id)elect:(id (^)(id obj1,id obj2))func;
- (id)max;
- (id)max:(id (^)(id object))func;
- (id)min;
- (id)min:(id (^)(id object))func;
- (double)sum;
- (double)average;
- (BOOL)sequenceEqual:(NSEnumerator *)other;
- (BOOL)sequenceEqual:(NSEnumerator *) other
       withComparator:(BOOL(^)(id obj1, id obj2))equalityComparator;

单个对象返回者

- (id)elementAt:(NSInteger)index;
- (id)firstOrDefault;
- (id)firstOrDefault:(BOOL (^)(id))predicate;
- (id)lastOrDefault;
- (id)lastOrDefault:(BOOL (^)(id))predicate;

集合方法

- (NSEnumerator *)concat:(NSEnumerator *)secondEnumerator;
- (NSEnumerator *)concatOne:(id)one;
- (NSEnumerator *)union:(NSEnumerator *)secondEnumerator;
- (NSEnumerator *)intersect:(NSEnumerator *)secondEnumerator;
- (NSEnumerator *)except:(NSEnumerator *)secondEnumerator;

- (NSEnumerator *)zip:(NSEnumerator *)secondEnumerator
                 with:(id (^)(id obj1,id obj2))func;

- (NSEnumerator *)join:(NSEnumerator *)secondEnumerator
         firstSelector:(id<NSCopying> (^)(id object))firstSelector
        secondSelector:(id<NSCopying> (^)(id object))secondSelector;

- (NSEnumerator *)join:(NSEnumerator *)secondEnumerator
         firstSelector:(id<NSCopying> (^)(id object))firstSelector
        secondSelector:(id<NSCopying> (^)(id object))secondSelector
        resultSelector:(id (^)(id,id))resultSelector;

- (NSEnumerator *)groupJoin:(NSEnumerator *)secondEnumerator
              firstSelector:(id<NSCopying> (^)(id object))firstSelector
             secondSelector:(id<NSCopying> (^)(id object))secondSelector;

导出方法

- (NSArray *)toArray;
- (NSSet *)toSet;
- (NSDictionary *)toDictionary;
- (NSDictionary *)toDictionary:(id<NSCopying> (^)(id object))keySelector;
- (NSDictionary *)toLookup;
- (NSDictionary *)toLookup:(id<NSCopying> (^)(id object))keySelector;

生成方法

+ (NSEnumerator *)range:(int)start count:(int)count;
+ (NSEnumerator *)repeat:(id)item count:(int)count;
+ (NSEnumerator *)empty;

I/O 方法

+ (NSEnumerator *)readBytes:(NSString *)path;
+ (NSEnumerator *)readLines:(NSString *)path;

NSString 类别方法

+ (id)stringByJoin:(NSEnumerator *)unichars
     withSeparator:(NSString *)separator;
- (NSEnumerator *)enumerateCharacters;
- (NSEnumerator *)enumerateComponentsSeparatedByString:(NSString *)separator
                                               options:(NSStringCompareOptions)options;
- (NSEnumerator *)enumerateComponentsSeparatedByString:(NSString *)separator;

Mou 撰写 - 为网页开发者提供的缺失的 Markdown 编辑器