NSArray+Collection
再次编写循环
这个库受到了 Laravel 集合类的启发,使用了其表达性的语法。检查 .h 文件以查看文档以及所有可用方法。
安装
将类别文件复制到您的项目中,或者只需
pod 'Collection' 数组可用方法
each:block eachWithIndex:blockWithIndex map:block flatMap:block flatMap:key:block
filter:blockChecker filterWith:keyPath reject:blockChecker rejectWith:keyPath first:blockChecker first:blockChecker:default first:blockChecker:defaultBlock last:blockChecker last:blockChecker:default contains:blockChecker doesntContain:blockChecker where:keyPath:like where:keyPath:is where:keyPath:isNot whereAny:keyPaths:like whereAny:keyPaths:is whereNull whereNull:keyPath whereNotNull whereNotNull:keyPath whereIn:keyPath:values
sort sort:key sort:key:ascending sortWith:block:ascending
reverse random:quantity slice:howMany take:howMany splice:howMany pop
pluck:keyPath pluck:keyPath:keyKeyPath flatten flatten:keyPath partition:block reduce:block reduce:block:initialCarry pipe:block when:condition:block groupBy:keyPath gorupBy:keyPath:block expand:keypath
maxObject maxObject:keyPath maxObjectFor:block minObject minObject:keyPath minObjectFor:block
suffled permutations zip:other mapToAssoc:block countedSet implode:glue toString toJson
intersect:other union:other join:other diff:other minus:other minusExactOcurrences:other distinct distinct:keypath
range:to range:from:to
times:times:value times:times:callback
crossJoin:list cartesianProduct:arrays
sum sum:keyPath sumWith:block avg avg:keyPath max max:keyPath min min:keyPath countKeyPath:
map_:selector map_:selector:withObject each_:selector each_:selector:withObject filter_:selector filter_:selector:withObject reject_:selector reject_:selector:withObject
字典可用方法
fromData:data fromString:string toString except:keys only:keys
each:block filter:block filter:block map:block
字符串可用方法
repeat:text:times isEmptyString explode:delimiter initials toNumber append:other prepend:other substr:from substr:from:length replace:text:with replaceRegexp:regexp:with split split:lenght trim trimWithNewLine trimLeft trimRight camelCase pascalCase snakeCase ucFirst withoutDiacritic urlEncode urlDecode md5 toBase64 fromHex:str toHex
endsWith:text startsWith:text contains:text matches:regexp
lpad:length:text rpad:length:text
数组示例
仅提供一些示例,检查.h文件或测试用例以查看全部示例。在.h文件中有关于其实际功能的解释
NSArray* array = @[@1,@3,@4,@5,@6];
NSNumber* first = [array first:^BOOL(NSNumber* object) {
return object.intValue > 4;
}];
NSLog(@"Fist: %@",first);NSNumber* second = [array first:^BOOL(NSNumber* object) {
return object.intValue > 10;
} default:@25];
NSLog(@"second: %@",second);NSArray* oldHeroes = [self.heroes reject:^BOOL(Hero *object) {
return object.age.intValue < 20;
}];
[self printHeroArray:oldHeroes];[self printHeroArray:[self.heroes map:^id(Hero* obj, NSUInteger idx) {
obj.age = @(obj.age.intValue * 2);
return obj;
}]];
[self printArray:[self.heroes pluck:@"enemy"]];NSNumber* totalAge = [self.heroes reduce:^id(NSNumber* carry, Hero* object) {
return @(object.age.intValue + carry.intValue);
} carry:@(0)];
// or
NSNumber* totalAge2 = [self.heroes sum:@"age"];NSNumber* age = [self.heroes sum:@"age"];
NSLog(@"Age again: %@",age);
NSNumber* older = [self.heroes max:@"age"];
NSLog(@"older: %@",older);
NSNumber* younger = [self.heroes min:@"age"];
NSLog(@"younger: %@",younger);
NSNumber* average = [self.heroes avg:@"age"];
NSLog(@"average: %@",average);[self printArray:[@[@1,@2,@3,@4] union:@[@4,@5,@6]]];
[self printArray:[@[@1,@2,@3,@4] intersect:@[@4,@5,@6]]];
[self printArray:[@[@1,@2,@3,@4] join:@[@4,@5,@6]]];
[self printArray:[@[@1,@2,@3,@4] diff:@[@4,@5,@6]]];[self.heroes groupBy:@"age"];
[self.heroes groupBy:@"age" block:^NSString *(Hero *object, NSString *key) {
return str(@"age %@", object.age);
}];NSArray* names = @["Spiderman", @"Batman", @"Robin", @"Luxor"];
BOOL containsSpiderman = [self.names contains:^BOOL(Hero* hero) {
return [hero.name isEqualToString:@"Spiderman"];
}];
BOOL heroes = [self.names where:@"name" like:@"man"];
// heroes => [@"Spiderman, @"Batman"] [@[@1,@2,@3,@4,@5,@6] slice:3];
[@[@1,@2,@3,@4,@5,@6] slice:10];
[@[@1,@2,@3,@4,@5,@6] slice:6];
[@[@1,@2,@3,@4,@5,@6] take:2];
[@[@1,@2,@3,@4,@5,@6] take:10];
[@[@1,@2,@3,@4,@5,@6] take:-2];
[@[@1,@2,@3,@4,@5,@6] take:-10];NSArray* array2 = @[@1,@2,@3,@4,@5].mutableCopy;
NSArray* chunk = [array2 splice:2];
[self printArray:chunk];
[self printArray:array2];字典示例
仅提供一些示例,检查.h文件或测试用例以查看全部示例
NSDictionary* filtered = [@{@"pass":@0, @"dontPass":@1} filter:^BOOL(id key, id object) {
return object.floatValue == 0;
}];NSDictionary* result = [@{@"toBeMapped":@"value", @"toBeMapped2":@"value2"} map:^id(id key, id object) {
return [key append:object];
}];字符串示例
仅提供一些示例,检查.h文件或测试用例以查看全部示例
// [NSString stringWithFormat:@"a formated %@ string", value];
// becomes
str(@"a formated %@ string", value);NSArray* result = [@"hola;que;tal" explode:@";"];
NSArray* expectation = @[@"hola",@"que",@"tal"];
XCTAssertTrue([result isEqual:expectation]);NSString* result = [@" trim " trim];
XCTAssertTrue( [result isEqualToString:@"trim"]);NSString* result = @"this should be camelcased".camelCase;
XCTAssertTrue( [result isEqualToString:@"thisShouldBeCamelcased"]);