NSUnderscore 是一些类别的集合,添加到 NSArray、NSDictionary 和 NSSet 中。这个项目试图将一些在 Underscore.js 中发现的有用功能带到 iOS 编程的世界。并非所有功能都已被移植,因为一些函数已经在集合对象中实现。
首先导入适当的类别:
#import "NSUnderscore/NSArray+NSUnderscoreAdditions.h"
或
#import "NSUnderscore/NSDictionary+NSUnderscoreAdditions.h"
或
#import "NSUnderscore/NSSet+NSUnderscoreAdditions.h"
以下函数可供您使用:
NSArray *objects = @[@(2), @(4)];
__block NSInteger total = 0;
[objects each:^(NSNumber *object) {
total += object.integerValue;
}];
// Result: total == 6
NSArray *objects = @[@(2), @(3)];
NSArray *modifiedObjects = [objects map:(id)^(NSNumber *object) {
return @(object.integerValue * 2);
}];
// Result: modifiedObjects == @[ @(4), @(6) ]
NSArray *objects = @[@(2), @(4)];
NSNumber *reduced = [objects reduce:(id)^(NSNumber *object, NSNumber *previousValue) {
return @(object.integerValue + previousValue.integerValue);
}];
// Result: reduced == @(6)
NSArray *objects = @[@(2), @(4)];
NSArray *filtered = [objects filter:(id)^(NSNumber *object) {
return object.integerValue == 2;
}];
// Result: filtered == @[ @(2) ]
NSArray *objects = @[@(2), @(4)];
NSArray *filtered = [objects reject:(id)^(NSNumber *object) {
return object.integerValue == 2;
}];
// Result: filtered == @[ @(5) ]
NSArray *objects = @[@(2), @(4)];
BOOL result = [objects every:^BOOL(NSNumber *object) {
return object.integerValue > 0;
}];
// Result: result == YES
NSArray *objects = @[@(-2), @(4)];
BOOL result = [objects some:^BOOL(NSNumber *object) {
return object.integerValue < 0;
}];
// Result: result == YES
NSArray *objects = @[@{@"id": @(1)}, @{@"id": @(2)}];
NSArray *plucked = [objects pluck:@"id"];
// Result: plucked == [ @(1), @(2) ]
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)}
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)}
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"}] }
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"}] }
NSArray *objects = @[@(1), @(2), @(3)];
NSDictionary *countedObjects = [objects countBy:^id(NSNumber *val) {
return val.integerValue % 2 == 0 ? @"even": @"odd";
}];
// Result: @{ @"even": 1, @"odd": 2 }
NSArray *objects = @[@(1), @(2), @(3)];
NSDictionary *partitionedObjects = [objects partition:^BOOL(NSNumber *val) {
return val.integerValue % 2 == 0;
}];
// Result: @[ @[ @(2) ], @[ @(1), @(3) ] ]