为NSArray
、NSSet
和NSDictionary
提供的分类,它们提供许多方法,使得集合操作更加便捷和简洁。
要在你的应用程序中使用MCSCollectionUtility,只需将'Classes'文件夹拖到你的项目中,并导入'MCSCollectionUtility.h'文件。
#import "MCSCollectionUtility.h"
由于创建的分类中提供了许多方法,这些示例仅提供其中一小部分。更多努力被投入到以下(文档部分)下面的文档制作中。
检查数组中包含字母'a'的字符串元素有多少个。
NSArray *elements = @[@"Warsaw", @"Berlin", @"London", @"New York", @"Paris"];
NSInteger count = [elements mcs_count:BOOL^(NSString *object) {
return [object rangeOfString:@"a"].location != NSNotFound;
}];
//result 2
只要数组元素小于10,就取数组元素。当第一个元素不满足此条件时停止。
NSArray *elements = @[@"1", @"5", @"7", @"10", @"16", @"8"];
NSArray *newElementsArray = [elements mcs_takeWhile:BOOL^(NSNumber *object) {
return [object integerValue] < 10;
}];
//result @[@"1", @"5", @"7"]
创建一个只包含每个元素唯一表示的数组。
NSArray *elements = @["1", @"2", "3", @"1", @"4"];
NSArray *newElementsArray = [elements mcs_unique];
//result @["1", @"2", "3", @"4"];
以下段落提供了MCSCollectionUtility中包含的分类方法的文档。
- (NSArray *)mcs_skip:(NSInteger)number;
跳过接收数组中指定数量的元素,并返回包含剩余元素的新数组。当number大于接收数组中的元素数量时,不会崩溃。
- (NSArray *)mcs_skipWhile:(BOOL(^)(id object))block;
只要由指定的块评估得到值等于YES
,就绕过接收数组中的元素,并返回包含剩余元素的新数组。
- (NSArray *)mcs_take:(NSInteger)number;
返回从接收数组开始的部分连续元素的新数组。
- (NSArray *)mcs_takeWhile:(BOOL(^)(id object))block;
返回从接收数组开始,由指定的块评估得到的值等于YES
的元素的新数组。当指定块的评估返回值等于NO
时停止向结果数组添加对象。
- (NSArray *)mcs_where:(BOOL(^)(id object))block;
返回由指定块返回值等于YES
的接收数组元素的新数组。
- (NSArray *)mcs_union:(NSArray *)array;
返回一个新数组,其中包含接收数组和通过compare:
选择器传递的array参数的并集的元素;
- (NSArray *)mcs_union:(NSArray *)array comparator:(BOOL(^)(id object1, id object2))block;
返回一个新数组,其中包含接收数组和通过指定块比较两个对象的array参数的并集的元素。
- (NSArray *)mcs_unique;
返回一个包含接收数组唯一元素的新数组。使用isEqual:
选择器确定元素相等性。
- (NSArray *)mcs_unique:(BOOL(^)(id obj1, id obj2));
返回一个包含接收数组唯一元素的新数组。使用指定的块确定元素相等性。
- (NSArray *)mcs_select:(id(^)(id object))block;
返回一个包含接收数组元素投影的新数组。使用指定的块将接收数组的每个元素投影到对象或nil。
- (NSArray *)mcs_selectMany:(NSArray *(^)(id object))block;
返回一个新的数组,其中的元素是接收数组的元素的投影。接收数组的每个元素都使用指定的块投影到对象数组或nil。将结果序列扁平化为一个由函数返回的单个序列。
- (NSArray *)mcs_map:(id(^)(id object))block;
返回一个新的数组,其中的元素是接收数组的元素的投影。接收数组的每个元素都使用指定的块投影到恰好一个对象中。
- (void)mcs_each:(void(^)(id object))block;
遍历接收数组的元素,并针对每个元素评估指定的块。
- (void)mcs_eachWithIndex:(void(^)(id object, NSUinteger index))block;
遍历接收数组的元素,并针对每个元素评估指定的块,并提供有关当前评估的对象索引的额外信息。
- (NSInteger)mcs_count:(BOOL(^)(id object))block;
返回评估指定块返回值等于YES的接收数组元素的数量。
- (NSInteger)mcs_minInteger:(NSInteger(^)(id object))block;
返回使用指定块对接收数组的元素进行转换后接收到的值中的最小NSInteger值。
- (CGFloat)mcs_minFloat:(CGFloat(^)(id object))block;
返回使用指定块对接收数组的元素进行转换后接收到的值中的最小CGFloat值。
- (NSInteger)mcs_maxInteger:(NSInteger(^)(id object))block;
返回使用指定块对接收数组的元素进行转换后接收到的值中的最大NSInteger值。
- (CGFloat)mcs_maxFloat:(CGFloat(^)(id object))block;
返回使用指定块对接收数组的元素进行转换后接收到的值中的最大CGFloat值。
- (NSInteger)mcs_sumInteger:(NSInteger(^)(id object))block;
返回使用指定块对接收数组的元素进行转换后接收到的NSInteger值之和。
- (CGFloat)mcs_sumFloat:(CGFloat(^)(id object))block;
返回使用指定块对接收数组的元素进行转换后接收到的CGFloat值之和。
- (NSInteger)mcs_averageInteger:(NSInteger(^)(id object))block;
返回使用指定块对接收数组的元素进行转换后接收到的平均NSInteger值。
- (CGFloat)mcs_averageFloat:(CGFloat(^)(id object))block;
返回使用指定块对接收数组的元素进行转换后接收到的平均CGFloat值。
- (id)mcs_first:(BOOL(^)(id object))block;
返回接收数组中第一个评估指定块返回值等于YES的对象。
- (id)mcs_last:(BOOL(^)(id object))block;
返回接收数组中最后一个评估指定块返回值等于YES的对象。
- (BOOL)mcs_single:(BOOL(^)(id object))block;
当评估指定块返回值等于YES对于接收数组的恰好一个元素时,返回YES。
- (BOOL)mcs_any:(BOOL(^)(id object))block;
当至少有一个元素评估指定块返回值等于YES时,返回YES。
- (BOOL)mcs_all:(BOOL(^)(id object))block;
当所有元素评估指定块返回值等于YES时,返回YES。
- (NSArray *)mcs_reverse;
返回一个新数组,包含接收数组元素的反向顺序。
- (BOOL)mcs_hasAnyElement
当接收数组至少有一个元素时,返回YES;否则返回NO。
- (id)mcs_sample;
返回接收数组中的一个随机对象;
- (NSArray *)mcs_sample:(NSInteger)count;
返回一个新数组,包含接收数组中的count个随机对象;
- (NSArray *)mcs_rotate:(NSInteger)count;
返回一个新数组,其元素旋转了count次。当count大于0时,元素的索引增加count,当count小于0时,元素的索引减少count。数组被视为环形数组。
- (NSArray *)mcs_sort;
返回一个新数组,其元素使用compare:
选择器进行排序。
- (NSArray *)mcs_sortInDescendingOrder;
返回一个新数组,其元素使用compare:
选择器进行降序排序。
- (void)mcs_each:(void(^)(id <NSCopying> key, id object))block;
遍历接收到的字典中的元素,并为每个关键字值对评估指定的块。
- (NSDictionary *)mcs_where:(BOOL(^)(id <NSCopying> key, id object))block;
返回一个新的字典,其中包含返回值等于YES
的指定块的接收字典中的键值对。
- (NSArray *)mcs_sortedKeys;
返回一个新的数组,包含使用compare:选择器对接收到的字典中的键进行排序。
- (NSArray *)mcs_sortedKeysArray:(NSComparisonResult(^)(id <NSCopying> key1, id <NSCopying> key2))block;
返回一个新的数组,包含使用指定块对接收到的字典中的键进行排序。
- (NSArrat *)mcs_sortedValuesArray;
返回一个新的数组,包含使用compare:选择器对接收到的字典中的值进行排序。
- (NSArray *)mcs_sortedValuesArray:(NSComparator)block;
返回一个新的数组,包含使用指定块对接收到的字典中的值进行排序。
- (NSInteger)mcs_count:(BOOL(^)(id <NSCopying> key, id object))block;
返回一个数字,用于计算接收到的字典中评估指定块返回值等于YES的键值对数量。
- (NSInteger)mcs_minInteger:(NSInteger(^)(id <NSCopying> key, id object))block;
返回由指定块对接收到的字典的键值对进行转换的结果中获得的值的最大NSInteger值。
- (CGFloat)mcs_minFloat:(CGFloat(^)(id <NSCopying> key, id object))block;
返回由指定块对接收到的字典的键值对进行转换的结果中获得的值的最大CGFloat值。
- (NSInteger)mcs_maxInteger:(NSInteger(^)(id <NSCopying> key, id object))block;
返回由指定块对接收到的字典的键值对进行转换的结果中获得的值的最大NSInteger值。
- (CGFloat)mcs_maxFloat:(CGFloat(^)(id <NSCopying> key, id object))block;
返回由指定块对接收到的字典的键值进行转换的结果中获得的值的最大CGFloat值。
- (NSInteger)mcs_sumInteger:(NSInteger(^)(id <NSCopying> key, id object))block;
返回由指定块对接收到的字典的键值对进行转换的结果中获得的NSInteger值的和。
- (CGFloat)mcs_sumFloat:(CGFloat(^)(id <NSCopying> key, id object))block;
返回由指定块对接收到的字典的键值对进行转换的结果中获得的CGFloat值的和。
- (NSInteger)mcs_averageInteger:(NSInteger(^)(id <NSCopying> key, id object))block;
返回由指定块对接收到的字典的键值对进行转换的结果中获得的NSInteger值的平均值。
- (CGFloat)mcs_averageFloat:(CGFloat(^)(id <NSCopying> key, id object))block;
返回由指定块对接收到的字典的键值对进行转换的结果中获得的CGFloat值的平均值。
- (BOOL)mcs_single:(BOOL(^)(id <NSCopying> key, id object))block;
当指定块的评估返回值等于YES且恰好有一个键值对时,返回YES。
- (BOOL)mcs_any:(BOOL(^)(id <NSCopying> key, id object))block;
当指定块的评估返回值等于YES且至少有一个键值对时,返回YES。
- (BOOL)mcs_all:(BOOL(^)(id <NSCopying> key, id object))block;
当指定块的评估返回值等于YES且包含接收到的字典中的所有键值对时,返回YES。
- (BOOL)mcs_hasAnyElement;
当接收到的字典中至少有一个键值对时返回YES,否则返回NO。
NSSet
操作集是NSArray
可用的操作的一个子集。由于NSSet
不保持其元素的任何指定顺序,因此没有依赖于集合元素顺序的方法。
- (void)mcs_each:(void(^)(id object))block;
遍历接收到的集合中的元素,并为每个元素评估指定的块。
- (NSArray *)mcs_sort:(NSComparator)block;
返回一个新的数组,包含使用指定块对接收到的集合元素进行排序。
- (NSSet *)mcs_where:(BOOL(^)(id object))block;
返回一个新的集合,包含使用指定块返回值等于YES
的接收到的集合元素。
- (NSSet *)mcs_union:(NSSet *)set;
返回一个新的集合,表示接收到的数组和作为参数传递的set的并集,使用compare:
选择器进行比较。
- (NSSet *)mcs_union:(NSSet *)set comparator:(BOOL(^)(id obj1, id obj2))block;
返回一个新的集合,表示接收到的集合和作为参数传递的set的并集,使用指定块来比较两个对象。
- (NSSet *)mcs_unique;
返回一个新的集合,包含接收到的集合中的唯一元素。使用isEqual:
选择器确定元素的相等性。
- (NSSet *)mcs_unique:(BOOL(^)(id obj1, id obj2))block;
返回一个新的集合,包含接收到的集合中的唯一元素。使用指定块确定元素的相等性。
- (NSSet *)mcs_select:(id(^)(id object))block;
返回一个新的集合,其中包含接收集合元素的投影。将接收集合的每个元素通过指定的代码块投影到对象或 nil。
- (NSSet *)mcs_selectMany:(NSArray *(^)(id object))block;
返回一个新的集合,其中包含接收集合元素的投影。将接收集合的每个元素通过指定的代码块投影到对象集合或 nil。将结果的序列扁平化成一个由函数返回的序列。
- (NSSet *)mcs_map:(id(^)(id object))block;
返回一个新的集合,其中包含接收集合元素的投影。将接收集合的每个元素通过指定的代码块投影到唯一的一个对象。
- (NSInteger)mcs_count:(BOOL(^)(id object))block;
返回值为 YES 的元素数量,条件是评估指定的代码块返回值等于 YES。
- (NSInteger)mcs_minInteger:(NSInteger(^)(id object))block;
返回接收集合元素变换后的最小 NSinteger 值。
- (CGFloat)mcs_minFloat:(CGFloat(^)(id object))block;
返回接收集合元素变换后的最小 CGFloat 值。
- (NSInteger)mcs_maxInteger:(NSInteger(^)(id object))block;
返回接收集合元素变换后的最大 NSinteger 值。
- (CGFloat)mcs_maxFloat:(CGFloat(^)(id object))block;
返回接收集合元素变换后的最大 CGFloat 值。
- (NSInteger)mcs_sumInteger:(NSInteger(^)(id object))block;
返回使用指定块对接收数组的元素进行转换后接收到的NSInteger值之和。
- (CGFloat)mcs_sumFloat:(CGFloat(^)(id object))block;
返回接收集合元素变换后的 CGFloat 值之和。
- (NSInteger)mcs_averageInteger:(NSInteger(^)(id object))block;
返回接收集合元素变换后得到的 NSInteger 值的平均值。
- (CGFloat)mcs_averageFloat:(CGFloat(^)(id object))block;
返回接收集合元素变换后得到的 CGFloat 值的平均值。
- (BOOL)mcs_single:(BOOL(^)(id object))block;
当评估指定的代码块对于接收集合的一个元素返回值等于 YES 时返回 YES。
- (BOOL)mcs_any:(BOOL(^)(id object))block;
当评估指定的代码块对于接收集合的一个或多个元素返回值等于 YES 时返回 YES。
- (BOOL)mcs_all:(BOOL(^)(id object))block;
当评估指定的代码块对于接收集合的所有元素返回值等于 YES 时返回 YES。
- (BOOL)mcs_hasAnyElement;
当接收集合至少有一个元素时返回 YES,否则返回 NO。
- (NSSet *)mcs_sample;
从接收集合中返回一个随机对象。
版权所有 © 2013 Macoscope, sp z o.o.
本软件遵循 Apache License 2.0 许可协议("许可协议");除非遵守许可协议或经书面同意,否则不允许使用此文件。您可以在此获得许可协议的副本:
http://www.apache.org/licenses/LICENSE-2.0
除非适用法律要求或书面同意,否则在许可协议下分发的软件按“原样”分发,不提供任何形式的明示或暗示保证。有关许可协议中具体管理权限和限制的条款,请参阅许可协议。