EasySequence 1.3.1

EasySequence 1.3.1

ValiantCatWilliam Zang 维护。



  • William Zang、姜沂 和 Qin Hong

EasySequence

Build Status Version License Platform codecov

EasySequence 是一个强大的基础库,用于处理序列类型,如数组、集合、字典。任何符合 NSFastEnumeration 协议的对象都可以初始化为 EZSequence 实例,然后您可以对其进行操作。最后,您可以将其转换回原始类型。

要求

iOS 8.0 或更高版本。

安装

EasySequence 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中:

pod 'EasySequence'

要运行示例项目,克隆仓库,然后首先从 Example 目录运行 pod install

功能

创建

  • 可以初始化自任何符合 NSFastEnumeration 协议的对象。

枚举

  • 使用forEach:进行枚举
  • 使用forEachWithIndex:进行枚举
  • 使用快速枚举
  • 使用NSEnumerator进行枚举

操作

  • 映射
  • 扁平化映射
  • 过滤
  • 选择
  • 拒绝
  • 跳过
  • 任何
  • 连接
  • 归约
  • 按组
  • 第一个对象
  • 第一个匹配条件对象
  • 第一个索引位置

转移

  • 符合EZSTransfer协议的对象可以获取从EZSequence转移的实例。

线程安全类型

我们提供以下线程安全类型

  • EZSArray
  • EZSWeakArray
  • EZSOrderedSet
  • EZSWeakOrderedSet
  • EZSQueue

弱引用容器

EZSWeakArrayEZSWeakOrderedSet对其元素的引用为弱引用。

示例

创建序列

EZSequence 类型代表了一种特定的顺序,是用来表示相关对象或对象之间跟随关系的序列。例如,NSStringArray 或 NSSet 比 EZSequence 不仅是序列。

EZSequence 可以从遵守 NSFastEnumeration 协议的任何对象初始化。

NSArray *array = @[@1, @2, @3];
EZSequence *sequence = [[EZSequence alloc] initWithOriginSequence:array];

枚举

  • 使用快速枚举进行枚举
EZSequence *sequence = [[EZSequence alloc] initWithOriginSequence:@[@1, @2, @3]];
NSMutableArray *receive = [NSMutableArray array];
for (id item in sequence) {
    [receive addObject:item];
}
  • 使用 NSEnumerator 进行枚举
EZSequence<NSNumber *> *sequence = [[EZSequence alloc] initWithOriginSequence:@[@1, @2, @3]];
NSMutableArray<NSNumber *> *receive = [NSMutableArray array];

NSEnumerator<NSNumber *> *enumerator = [sequence objectEnumerator];
for (id item in enumerator) {
    [receive addObject:item];
}
  • 基于 block 的枚举
EZSequence<NSNumber *> *sequence = [[EZSequence alloc] initWithOriginSequence:@[@1, @2, @3]];
NSMutableArray *receive = [NSMutableArray array];
[sequence forEach:^(NSNumber *item) {
    [receive addObject:item];
}];

[sequence forEachWithIndex:^(NSNumber * _Nonnull item, NSUInteger index) {
    [receive addObject:item];
}];

[sequence forEachWithIndexAndStop:^(NSNumber * _Nonnull item, NSUInteger index, BOOL * _Nonnull stop) {
    if (index == 2) {
        *stop = YES;
    }
    [receive addObject:item];
}];

操作

  • 映射
EZSequence<NSString *> *sequence = EZS_Sequence(@[@"111", @"222", @"333"]);
EZSequence<NSNumber *> *mappedSequence = [sequence map:^id _Nonnull(NSString * _Nonnull value) {
    return @(value.integerValue);
}];
// mappedSequence => @111, @222, @333
  • 选择
EZSequence<NSNumber *> *sequence = [@[@1, @2, @3, @4, @5, @6] EZS_asSequence];
EZSequence<NSNumber *> *oddNumbers = [sequence select:^BOOL(NSNumber * _Nonnull value) {
    return value.integerValue % 2 == 1;
}];
// oddNumbers => @1, @3, @5
  • 过滤
EZSequence *seq = EZS_Sequence(@[@"1", @"2", @"3", @"4", @"5"]);
EZSequence *filteredSeq = [seq filter:EZS_not(EZS_isEqual(@"4"))];
// filteredSeq = > @"1", @"2", @"3", @"5"
  • 连接
NSArray *a = @[@1, @2, @3];
NSArray *b = @[@"a", @"b"];
EZSequence<EZSequence *> *zippedSeq = [EZSequence zip:@[a, b]];
// zippedSeq => @[@1, @"a"], @[@2, @"b"]

更多信息和使用帮助,请参阅我们的单元测试和 API 注释。

传输协议

符合EZSTransfer协议的对象可以获取从EZSequence转移的实例。

EZSequence *sequence = [[EZSequence alloc] initWithOriginSequence:@[@1, @2, @3, @2]];

// transfer to a `NSArray`
NSArray *array = [sequence as:NSArray.class];
// array => @1, @2, @3, @2

// transfer to a `NSSet`
NSSet *set = [sequence as:NSSet.class];
// set => @1, @2, @3

// transfer to a `NSOrderedSet`
NSOrderedSet *orderedSet = [sequence as:NSOrderedSet.class];
// orderedSet => @1, @2, @3

作者

张伟,[email protected]
姜沂,[email protected]
秦红,[email protected]
SketchK,[email protected]

许可协议

EasySequence 以 MIT 许可协议提供。有关更多信息,请参阅 LICENSE 文件。