// 为集合字符串排序(cmpare:)
// - null :空类型 就是字符型的0;
// - [NSNull null]是对象类型,能够存入集合的数据:为其分配了内存,但其中的值为空(不能被排序否则程序会崩溃);
// - 对非对象类型指针赋空值用null(如C指针)
// 对集合内的字符串排序:调用排序方法后会创建一个新的集合返回
// - sortedArrayUsing...(sort:分类)
NSArray *group = @[@"red", @"green", @"blue"];
// 1.选择器排序:调用系统的排序方法,即字符串的比较方法
NSArray *reorder_S = [group sortedArrayUsingSelector:@selector(compare:)];
NSLog(@"selector:%@", reorder_S);
// 2.描述排序
// - 提取排序的信息
// > Key:没有key所以使用nil(为自定义对象排序Key就是排序的属性)
// > ascending:布尔类型,YES为升序(ASKII码值)
// - 为方法传递排序的参数
NSSortDescriptor *group_D = [NSSortDescriptor sortDescriptorWithKey:nil ascending:NO];
NSArray *reorder_D = [group sortedArrayUsingDescriptors:@[group_D]];
NSLog(@"descriptor:%@", reorder_D);
// 3.代码块排序:也是调用字符串的比较方法
NSArray *reorder_B = [group sortedArrayUsingComparator:^NSComparisonResult(NSString *obj1, NSString *obj2) {return [obj1 compare:obj2];}];
NSLog(@"block:%@",reorder_B);
// - 参数:不会影响排序的顺序
// > SortCurrent:并行排序,即多线程排序,特点:安全性不好
// > SortStable:串行排序,即打单步执行:数据庞大可能效率有点低
// - block的实现,因为是取值两两比较:使用结果仅有三个,根据返回结果就确定大小然后进行返回
reorder_B = [group sortedArrayWithOptions:NSSortStable usingComparator:^NSComparisonResult(NSString *obj1, NSString *obj2) { return [obj1 compare:obj2]; }];
NSLog(@"block:%@",reorder_B);