比您的标准concussion功能更强大!
Funcussion 在标准 Objective-C 对象上提供便利方法,帮助您用功能式编程风格编写 Objective-C。对集合执行的操作总是返回一个新的集合。这与这里提供的许多Objective-C内建方法的可变方法鼓励的方法形成鲜明对比。大部分常用的功能式集合集成了常见函数式标识,并加入了一些糖来确保其甜美的效果。
一些甜点来丰富您与 NSArray 的常见交互。
返回数组中的第一个对象;是 [array objectAtIndex:0]
的快捷方式。
-(id)firstObject;
示例
[@[@"Foo", @"Bar", @"Baz"] firstObject]; // => @"Foo"
递归地将数组压平到一维数组中。按遇到的顺序将对象插入返回的数组中。
-(NSArray*)flatten;
示例
NSArray *simpleArray = @[@"one", @"two"];
NSArray *nestedArray = @[@"microphone", @"check", simpleArray, simpleArray];
[nestedArray flatten];
// => @[@"microphone", @"check", @"one", @"two", @"one", @"two"];
返回数组的 "最大" 值。需要一个返回 NSComparisonResult 的块。
-(NSArray*)max:(ObjectArrayComparatorBlock)aBlock;
示例
NSArray *numericArray = @[@42,@20,@22];
[numericArray max:^NSComparisonResult(id max, id obj) {
return [max compare:obj];
}];
// => @42
返回数组的 "最小" 值。需要一个返回 NSComparisonResult 的块。
-(NSArray*)min:(ObjectArrayComparatorBlock)aBlock;
示例
[numericArray min:^NSComparisonResult(id min, id obj) {
return [min compare:obj];
}];
// => @20
将功能式方法应用于处理 NSArray
实例的核心方法。
使用提供的函数迭代 NSArray
中的每个元素。
-(void)each:(VoidArrayIteratorBlock)aBlock;
示例
[simpleArray each:^(id obj) {
NSLog(@"element: %@",obj);
}];
迭代 NSArray
中的每个元素,同时将元素和索引提供给提供的函数。
-(void)eachWithIndex:(VoidArrayIteratorIndexedBlock)aBlock;
示例
[simpleArray eachWithIndex:^(id obj, NSUInteger index) {
NSLog(@"element: %@ index: %d", obj, index);
}];
将函数应用于 NSArray
中的每个元素。返回一个新的数组,包含应用函数的结果。
-(NSArray*)map:(ObjectArrayIteratorBlock)aBlock;
示例
[simpleArray map:^(id obj) {
return [obj uppercaseString];
}];
// => @[@"ONE", @"TWO"]
将函数应用于 NSArray
中的每个元素,同时将索引也提供给函数。返回一个新的数组,包含应用函数的结果。
-(NSArray*)mapWithIndex:(ObjectArrayIteratorIndexedBlock)aBlock;
示例
[simpleArray mapWithIndex:^(id obj, NSUInteger index) {
return [[obj stringByAppendingFormat:@":%d", index] uppercaseString];
}];
// => @[@"ONE:0", @"TWO:1"]
应用提供的函数并返回一个新的NSArray
,其中包含所有提供给函数且评估结果为真的元素。
-(NSArray*)filter:(BoolArrayIteratorBlock)aBlock;
示例
[@[@0, @1, @"zero", @"one"] filter:^BOOL(id obj) {
return [obj isKindOfClass:[NSNumber class]];
}];
// => @[@0,@1]
将提供的函数应用于将NSArray
中的所有值缩减为一个单一的值。使用与缩减目标相同的类型的累加器初始化它。
-(id)reduceWithAccumulator:(id)accumulator andBlock:(ObjectArrayAccumulatorBlock)aBlock;
示例
NSArray *numericArray = @[@22, @20];
[numericArray reduceWithAccumulator:@0 andBlock:^id(id acc, id obj) {
return [NSNumber numberWithInt:[acc intValue] + [obj intValue]];
}]; // => @42
将提供的函数应用于将NSArray
中的所有值缩减为一个单一的值。向块传递一个索引。使用与缩减目标相同的类型的累加器初始化它。
-(id)reduceWithAccumulator:(id)accumulator andIndexedBlock:(ObjectArrayAccumulatorBlock)aBlock;
示例
NSArray *numericArray = @[@22, @20];
[numericArray reduceWithAccumulator:@0 andIndexedBlock:^id(id acc, id obj, NSUInteger index) {
return [NSNumber numberWithInt:[acc intValue] + [obj intValue] + index];
}]; // => @43
返回数组中与所提供的BOOL函数匹配的第一个元素。
-(id)detect:(BoolArrayIteratorBlock)aBlock;
示例
NSArray *mixedArray = @[@0, @1, @"zero", @"one"];
[mixedArray detect:^BOOL(id obj) {
return [obj isKindOfClass:[NSString class]];
}]; // => @"zero"
将提供的BOOL函数应用于数组中的每个元素,并返回一个BOOL值,表示该函数对所有元素均有效。
-(BOOL)every:(BoolArrayIteratorBlock)aBlock;
示例
[mixedArray every:^BOOL(id obj) {
return [obj isKindOfClass:[NSString class]];
}]; // => NO
[mixedArray every:^BOOL(id obj) {
return [obj isKindOfClass:[NSObject class]];
}]; // => YES
将提供的BOOL函数应用于数组中的每个元素,并返回一个BOOL值,表示该函数对任何元素均有效。
-(BOOL)any:(BoolArrayIteratorBlock)aBlock;
示例
[mixedArray any:^BOOL(id obj) {
return [obj isKindOfClass:[NSString class]];
}]; // => YES
[mixedArray any:^BOOL(id obj) {
return [obj isKindOfClass:[NSException class]];
}]; // => NO
将函数方法应用于处理NSDictionary
实例的核心方法。
使用提供的函数迭代NSDictionary
中的每个键值对。
-(void)each:(VoidDictIteratorBlock)aBlock;
示例
NSDictionary *simpleDict = @{@1: @"one", @2: @"two"}
[simpleDict each:^(id key, id value) {
NSLog(@"couplet: %@ => %@", key, value);
}];
将返回NSDictionary
的函数应用于NSDictionary
的每个键值对。返回一个新的字典,其中包含应用函数的结果。
-(NSDictionary*)map:(DictionaryDictIteratorBlock)aBlock;
示例
[simpleDict map:^(id key, id value) {
return @{[key stringByAppendingFormat:@":%@",value]: [key uppercaseString]};
}];
// => @{@"ONE": @"one:1", @"TWO": @"two:2"};
将返回对象的函数应用于NSDictionary
的每个键值对。返回一个新的字典,其中包含应用函数的结果作为值。
-(NSDictionary*)mapValues:(ObjectDictIteratorBlock)aBlock;
示例
[simpleDict mapValues:^id(id key, id value) {
return [key stringByAppendingFormat:@":%@",value]
}];
// => @{@"one": @"one:1", @"two": @"two:2"};
将返回对象的函数应用于NSDictionary
的每个键值对。返回一个包含应用函数结果的数组。
-(NSArray*)mapToArray:(ObjectDictIteratorBlock)aBlock;
示例
[simpleDict mapToArray:^id(id key, id value) {
return [key stringByAppendingFormat:@":%@",value]
}];
// => @[@"one:1", @"two:2"];
将提供的函数应用于每个NSDictionary
的键值对,并返回一个新的NSDictionary
,该字典包含所有供应商函数评估结果为真的键值对。
-(NSDictionary*)filter:(BoolDictIteratorBlock)aBlock;
示例
__block NSPredicate *containPred = [NSPredicate predicateWithFormat:
@"SELF contains[cd] %@", @"one"];
[simpleDict filter:^BOOL(id key, id value) {
return [containPred evaluateWithObject:key];
}]; // => @{@"one": @"one:1"};
将提供的函数应用于将NSDictionary
中的所有键值对缩减为一个单一的值。使用与缩减目标相同的类型的累加器初始化它。
-(id)reduceWithAccumulator:(id)accumulator andBlock:(ObjectAcumulatorDictBlock)aBlock;
示例
[simpleDict reduceWithAccumulator:@0 andBlock:^id(id acc, id key, id value) {
return [NSNumber numberWithInt:[acc intValue] + [value intValue]];
}]; // => @3
将提供的BOOL函数应用于NSDictionary
中的每个元素,并返回一个BOOL值,表示该函数对所有元素均有效。
-(BOOL)every:(BoolDictIteratorBlock)aBlock;
示例
[simpleDict every:^BOOL(id key, id value) {
return [key isKindOfClass:[NSString class]];
}]; // => YES
[simpleDict every:^BOOL(id key, id value) {
return [value intValue] < 2;
}]; // => NO
将提供的BOOL函数应用于NSDictionary
中的每个元素,并返回一个BOOL值,指示该函数是否对任何元素为真。
-(BOOL)any:(BoolDictIteratorBlock)aBlock;
示例
[simpleDict any:^BOOL(id key, id value) {
return [key isKindOfClass:[NSNumber class]];
}]; // => NO
[simpleDict any:^BOOL(id key, id value) {
return [value intValue] < 2;
}]; // => YES
欢迎贡献,只需分支项目,进行更改,并提交拉取请求。请确保SenTesting套件覆盖了您所做的任何添加,并且您进行任何修改后仍然可以正常通过。
与我的所有软件一样,Funcussion使用WTFPL,因此您可以随意使用它。