//第一个参数是要进行比较的字符串, 第二个参数是比较的方法, 是一个枚举的类型 - (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask;
枚举的值: NSStringCompareOptions数组
enum{ NSCaseInsensitiveSearch = 1,//不区分大小写比较 NSLiteralSearch = 2,//区分大小写比较 NSBackwardsSearch = 4,//从字符串末尾开始搜索 NSAnchoredSearch = 8,//搜索限制范围的字符串 NSNumbericSearch = 64//按照字符串里的数字为依据,算出顺序。例如 Foo2.txt < Foo7.txt < Foo25.txt //如下定义高于 mac os 10.5 或者高于 iphone 2.0 可用 , NSDiacriticInsensitiveSearch = 128,//忽略 "-" 符号的比较 NSWidthInsensitiveSearch = 256,//忽略字符串的长度,比较出结果 NSForcedOrderingSearch = 512//忽略不区分大小写比较的选项,并强制返回 NSOrderedAscending 或者 NSOrderedDescending //如下定义高于 iphone 3.2 可用 , NSRegularExpressionSearch = 1024//只能应用于 rangeOfString:..., stringByReplacingOccurrencesOfString:...和 replaceOccurrencesOfString:... 方法。使用通用兼容的比较方法,若是设置此项,能够去掉 NSCaseInsensitiveSearch 和 NSAnchoredSearch }
NSArray *originalArray = @[@"dfg", @"dfa", @"gde", @"mgc", @"faa"]; /// 方法1: sortedArrayUsingComparator NSArray *result1 = [originalArray sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) { NSComparisonResult result; result = [obj1 compare:obj2 options:NSLiteralSearch]; return result; }]; NSLog(@"result1 = %@", result1); /// 方法2: sortedArrayUsingFunction: 参数是一个C语言函数的函数指针. // NSArray *result2 = [originalArray sortedArrayUsingFunction:(nonnull NSInteger (*)(id _Nonnull __strong, id _Nonnull __strong, void * _Nullable)) context:nil] // 方法3: sortUsingDescriptors //其中,price为数组中的对象的属性,这个针对数组中存放对象比较更简洁方便 // NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"price" ascending:YES]; // NSArray *result3 = [originalArray sortedArrayUsingDescriptors:@[sortDescriptor]]; // 方法4: sortUsing NSArray *result4 = [originalArray sortedArrayUsingSelector:@selector(compare:)]; NSLog(@"result4 = %@", result4); /* //自定义排序方法 -(NSComparisonResult)comparePerson:(Person *)person{ //默认按年龄排序 NSComparisonResult result = [[NSNumber numberWithInt:person.age] compare:[NSNumber numberWithInt:self.age]];//注意:基本数据类型要进行数据转换 //若是年龄同样,就按照名字排序 if (result == NSOrderedSame) { result = [self.name compare:person.name]; } return result; } */