Funcussion 0.1.1

Funcussion 0.1.1

测试已测试
语言语言 Obj-CObjective C
许可证 WTFPL
发布最后发布2014年12月

未声明的所有者 维护。



  • Stephen Caudill

比您的标准concussion功能更强大!

它是什么?

Funcussion 在标准 Objective-C 对象上提供便利方法,帮助您用功能式编程风格编写 Objective-C。对集合执行的操作总是返回一个新的集合。这与这里提供的许多Objective-C内建方法的可变方法鼓励的方法形成鲜明对比。大部分常用的功能式集合集成了常见函数式标识,并加入了一些糖来确保其甜美的效果。

NSArray 扩展

一些甜点来丰富您与 NSArray 的常见交互。

firstObject

返回数组中的第一个对象;是 [array objectAtIndex:0] 的快捷方式。

-(id)firstObject;

示例

[@[@"Foo", @"Bar", @"Baz"]  firstObject]; // => @"Foo"

flatten

递归地将数组压平到一维数组中。按遇到的顺序将对象插入返回的数组中。

-(NSArray*)flatten;

示例

NSArray *simpleArray = @[@"one", @"two"];
NSArray *nestedArray = @[@"microphone", @"check", simpleArray, simpleArray];
[nestedArray flatten];
// => @[@"microphone", @"check", @"one", @"two", @"one", @"two"];

max

返回数组的 "最大" 值。需要一个返回 NSComparisonResult 的块。

-(NSArray*)max:(ObjectArrayComparatorBlock)aBlock;

示例

NSArray *numericArray = @[@42,@20,@22];
[numericArray max:^NSComparisonResult(id max, id obj) {
  return [max compare:obj];
}];

// => @42

min

返回数组的 "最小" 值。需要一个返回 NSComparisonResult 的块。

-(NSArray*)min:(ObjectArrayComparatorBlock)aBlock;

示例

[numericArray min:^NSComparisonResult(id min, id obj) {
    return [min compare:obj];
}];

// => @20

NSArray 功能操作

将功能式方法应用于处理 NSArray 实例的核心方法。

each

使用提供的函数迭代 NSArray 中的每个元素。

-(void)each:(VoidArrayIteratorBlock)aBlock;

示例

[simpleArray each:^(id obj) {
  NSLog(@"element: %@",obj);
}];

eachWithIndex

迭代 NSArray 中的每个元素,同时将元素和索引提供给提供的函数。

-(void)eachWithIndex:(VoidArrayIteratorIndexedBlock)aBlock;

示例

[simpleArray eachWithIndex:^(id obj, NSUInteger index) {
  NSLog(@"element: %@ index: %d", obj, index);
}];

map

将函数应用于 NSArray 中的每个元素。返回一个新的数组,包含应用函数的结果。

-(NSArray*)map:(ObjectArrayIteratorBlock)aBlock;

示例

[simpleArray map:^(id obj) {
  return [obj uppercaseString];
}];
// => @[@"ONE", @"TWO"]

mapWithIndex

将函数应用于 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]

reduceWithAccumulator:andBlock

将提供的函数应用于将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

reduceWithAccumulator:andIndexedBlock

将提供的函数应用于将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

detect

返回数组中与所提供的BOOL函数匹配的第一个元素。

-(id)detect:(BoolArrayIteratorBlock)aBlock;

示例

NSArray *mixedArray = @[@0, @1, @"zero", @"one"];
[mixedArray detect:^BOOL(id obj) {
  return [obj isKindOfClass:[NSString class]];
}]; // => @"zero"

every

将提供的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

any

将提供的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实例的核心方法。

each

使用提供的函数迭代NSDictionary中的每个键值对。

-(void)each:(VoidDictIteratorBlock)aBlock;

示例

NSDictionary *simpleDict = @{@1: @"one", @2: @"two"}
[simpleDict each:^(id key, id value) {
  NSLog(@"couplet: %@ => %@", key, value);
}];

map

将返回NSDictionary的函数应用于NSDictionary的每个键值对。返回一个新的字典,其中包含应用函数的结果。

-(NSDictionary*)map:(DictionaryDictIteratorBlock)aBlock;

示例

[simpleDict map:^(id key, id value) {
  return @{[key stringByAppendingFormat:@":%@",value]: [key uppercaseString]};
}];
// => @{@"ONE": @"one:1", @"TWO": @"two:2"};

mapValues

将返回对象的函数应用于NSDictionary的每个键值对。返回一个新的字典,其中包含应用函数的结果作为值。

-(NSDictionary*)mapValues:(ObjectDictIteratorBlock)aBlock;

示例

[simpleDict mapValues:^id(id key, id value) {
  return [key stringByAppendingFormat:@":%@",value]
}];
// => @{@"one": @"one:1", @"two": @"two:2"};

mapToArray

将返回对象的函数应用于NSDictionary的每个键值对。返回一个包含应用函数结果的数组。

-(NSArray*)mapToArray:(ObjectDictIteratorBlock)aBlock;

示例

[simpleDict mapToArray:^id(id key, id value) {
  return [key stringByAppendingFormat:@":%@",value]
}];
// => @[@"one:1", @"two:2"];

filter

将提供的函数应用于每个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"};

reduceWithAccumulator:andBlock

将提供的函数应用于将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

every

将提供的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

any

将提供的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,因此您可以随意使用它。