Resort是一个小型库,可以从键路径构建比较器,将单独的比较器组合成复合比较器,并可以构建反向比较器。
从键路径进行排序可能是件很简单的事情,如果不是因为这些边界情况。这个库处理nil和NSNull值,并提供了特殊处理(如始终小于和始终大于比较)。它使用始终小于作为实际默认值。但是,如果您需要的话,可以指定空值始终被认为是较大的。或者,您可能希望快速失败并抛出异常。
对于已经通过compare:
方法支持排序的Foundation类,顺序已经定义:例如,NSString
、NSDate
、NSNumber
、NSIndexPath
及其子类,如NSMutableString
和NSDecimalNumber
。
在其他情况下,比较器只是对对象的-description
执行排序。
从键路径构建的比较器与NSSortDiscriptors非常相似,但是有着易于组合的优势。这就是库的另一半,复合比较器。想想看,这是一种简单、可组合的方式来定义具有主要、次要等排序键的排序顺序。
要运行示例项目;首先从Example目录中克隆仓库,然后运行pod install
创建和使用键路径比较器的示例如下
NSComparator comparator = [RESResort comparatorForKeyPath:@"name"];
NSArray *sorted = [@[ z, a ] sortedArrayUsingComparator:comparator];
两个比较器(基于键路径或其他方式)可以组合成一个复合比较器,并按如下方式使用
NSComparator nameComparator = [RESResort comparatorForKeyPath:@"name"];
NSComparator countComparator = [RESResort comparatorForKeyPath:@"count"];
NSComparator compoundComparator = [RESResort compoundComparatorWithComparatorArray:@[ nameComparator, countComparator ]];
NSArray *sorted = [_array sortedArrayUsingComparator:compoundComparator];
仅支持Foundation框架。已测试于iOS 7和OS X 10.9。
Florian Ebeling, [email protected]
Resort可在MIT许可证下使用。有关更多信息,请参阅LICENSE文件。