NSUnderscore 0.1.1

NSUnderscore 0.1.1

测试已测试
语言语言 Obj-CObjective C
许可 MIT
发布最后发布2016年2月

Ryan Gerard 管理。



简介

NSUnderscore 是一些类别的集合,添加到 NSArray、NSDictionary 和 NSSet 中。这个项目试图将一些在 Underscore.js 中发现的有用功能带到 iOS 编程的世界。并非所有功能都已被移植,因为一些函数已经在集合对象中实现。

NSArray、NSDictionary 和 NSSet

首先导入适当的类别:

#import "NSUnderscore/NSArray+NSUnderscoreAdditions.h"

#import "NSUnderscore/NSDictionary+NSUnderscoreAdditions.h"

#import "NSUnderscore/NSSet+NSUnderscoreAdditions.h"

以下函数可供您使用:

  • each
    • 遍历元素的列表,依次将每个元素传给一个动作函数。
    • 示例
NSArray *objects = @[@(2), @(4)];
__block NSInteger total = 0;
[objects each:^(NSNumber *object) {
  total += object.integerValue;
}];
// Result: total == 6
  • map
    • 通过将列表中的每个值映射通过一个转换函数(动作)来生成一个新的值数组。
    • 示例
NSArray *objects = @[@(2), @(3)];
NSArray *modifiedObjects = [objects map:(id)^(NSNumber *object) {
  return @(object.integerValue * 2);
}];
// Result: modifiedObjects == @[ @(4), @(6) ]
  • reduce
    • reduce 将值列表汇总成一个单一的值。每次调用动作应返回。
    • 示例
NSArray *objects = @[@(2), @(4)];
NSNumber *reduced = [objects reduce:(id)^(NSNumber *object, NSNumber *previousValue) {
  return @(object.integerValue + previousValue.integerValue);
}];
// Result: reduced == @(6)
  • filter
    • 检查列表中的每个值,返回一个包含所有通过真值测试的值的数组。
    • 示例
NSArray *objects = @[@(2), @(4)];
NSArray *filtered = [objects filter:(id)^(NSNumber *object) {
  return object.integerValue == 2;
}];
// Result: filtered == @[ @(2) ]
  • reject
    • 返回列表中的值,但不包括那些通过真值测试(谓词)的元素。filter 的反面。
    • 示例
NSArray *objects = @[@(2), @(4)];
NSArray *filtered = [objects reject:(id)^(NSNumber *object) {
  return object.integerValue == 2;
}];
// Result: filtered == @[ @(5) ]
  • every
    • 如果列表中的所有值都通过谓词真值测试,则返回 true。
    • 示例
NSArray *objects = @[@(2), @(4)];
BOOL result = [objects every:^BOOL(NSNumber *object) {
  return object.integerValue > 0;
}];
// Result: result == YES
  • some
    • 如果列表中的任何值都通过谓词真值测试,则返回 true。如果找到一个真元素,则短路并停止遍历列表。
    • 示例
NSArray *objects = @[@(-2), @(4)];
BOOL result = [objects some:^BOOL(NSNumber *object) {
  return object.integerValue < 0;
}];
// Result: result == YES
  • pluck
    • map 的方便版本:提取属性值的列表。
    • 示例
NSArray *objects = @[@{@"id": @(1)}, @{@"id": @(2)}];
NSArray *plucked = [objects pluck:@"id"];
// Result: plucked == [ @(1), @(2) ]
  • max
    • 返回列表中的最大值。
    • 示例
NSArray *objects = @[@{@"id": @(10)}, @{@"id": @(20)}];
NSDictionary *maxValue = [objects max:^NSInteger(NSDictionary *dict) {
NSNumber *dictVal = (NSNumber *)[dict objectForKey:@"id"];
  return dictVal.integerValue;
}];
// Result: maxValue == @{@"id": @(20)}
  • min
    • 返回列表中的最小值。
    • 示例
NSArray *objects = @[@{@"id": @(10)}, @{@"id": @(20)}];
NSDictionary *minValue = [objects max:^NSInteger(NSDictionary *dict) {
NSNumber *dictVal = (NSNumber *)[dict objectForKey:@"id"];
  return dictVal.integerValue;
}];
// Result: minValue == @{@"id": @(10)}
  • groupBy
    • 将集合分割成集合并按运行每个值通过动作的结果进行分组。
    • 示例
NSArray *testObjects = @[@{@"token": @"ryan-1"}, @{@"token": @"ryan-2"}, @{@"token": @"test-1"}];
NSDictionary *groupedObjects = [testObjects groupBy:^id(NSDictionary *val) {
NSString *token = [val objectForKey:@"token"];
  return [token substringToIndex:4];
}];
// Result: @{ @"ryan": [@{@"token": @"ryan-1"}, @{@"token": @"ryan-2"}], @"test": [@{@"token": @"test-1"}] }
  • indexBy
    • 给定一个列表和一个动作函数,该函数为列表中的每个元素返回一个键,返回一个包含每个条目索引的对象。
    • 与 groupBy 类似,但在已知键是唯一的情况下。
    • 示例
NSArray *objects = @[@{@"token": @"1"}, @{@"token": @"2"}, @{@"token": @"3"}];
NSDictionary *indexedObjects = [objects indexBy:^id(NSDictionary *val) {
  return [val objectForKey:@"token"];
}];
// Result: @{ @"1": @{@"token": @"1"}, @"2": @{@"token": @"ryan-2"}, @"3": @{@"token": @"3"}] }
  • countBy
    • 对列表进行排序,将其分组,并返回每个组中的对象数量。
    • 类似于 groupBy,但不是返回包含值的列表,而是返回该组中值的数量。
    • 示例
NSArray *objects = @[@(1), @(2), @(3)];
NSDictionary *countedObjects = [objects countBy:^id(NSNumber *val) {
  return val.integerValue % 2 == 0 ? @"even": @"odd";
}];
// Result: @{ @"even": 1, @"odd": 2 }
  • partition
    • 将数组拆分为两个数组:一个包含满足操作的所有元素,另一个包含不满足操作的所有元素。
    • 示例
NSArray *objects = @[@(1), @(2), @(3)];
NSDictionary *partitionedObjects = [objects partition:^BOOL(NSNumber *val) {
  return val.integerValue % 2 == 0;
}];
// Result: @[ @[ @(2) ], @[ @(1), @(3) ] ]