- 不可变数组的方法:
- (NSArray *)sortedArrayUsingComparator:(NSComparator)cmptr
- 可变数组的方法 :
- (void)sortUsingComparator:(NSComparator)cmptr
NSComparator是利用typedef定义的Block类型
typedef NSComparisonResult (^NSComparator)(id obj1, id obj2);
这个返回值为NSComparisonResult枚举, 用来决定Block的两个参数顺序,需要我们在Block中指明不同条件下Block的两个参数的顺序即可, 数组中的元素就会按照设定的顺序进行排列
typedef NS_ENUM(NSInteger, NSComparisonResult) { NSOrderedAscending = -1L, // 升序,表示左侧的字符在右侧的字符前边 NSOrderedSame, // 相等 NSOrderedDescending // 降序,表示左侧的字符在右侧的字符后边 };
例如对Person类以年龄大小进行排序
Person *p1 = [[Person alloc] init]; p1.age = 18; Person *p2 = [[Person alloc] init]; p2.age = 28; Person *p2 = [[Person alloc] init]; p3.age = 11; NSArray *array = @[p1,p1,p2]; array = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { Person *p1 = obj1; Person *p2 = obj2; if (p1.age > p2.age) { return NSOrderedDescending; // 指定为降序,obj1排在obj2的后边 } else if (p1.age < p2.age) { return NSOrderedAscending; } else { return NSOrderedSame; } }];