// 数组的排序
// 定义一个数组数组
NSArray *array = @[@(3),@(5),@(4),@(2),@(1)];
// 对数组进行排序(升序)
NSArray *resultAscending = [array sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {
NSLog(@"%@ ~ %@", obj1, obj2);
return [obj1 compare:obj2];
}];
NSLog(@"对数组进行排序(正序):%@", resultAscending);
// 对数组进行排序(降序)
NSArray *resultDescending = [array sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {
NSLog(@"%@ ~ %@", obj1, obj2);
return [obj2 compare:obj1];
}];
NSLog(@"对数组进行排序(降序):%@", resultDescending);
// 对数组进行排序(乱序)
NSArray *resultBreak = [resultAscending sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {
NSLog(@"%@ ~ %@", obj1, obj2);
if (arc4random_uniform(2) == 0) { // arc4random_uniform会随机返回一个0到上界之间(不含上界)的整数。以2为上界会得到0或1,像投硬币一样
return [obj2 compare:obj1];// descending
} else {
return [obj1 compare:obj2];// ascending
}
}];
NSLog(@"对数组进行排序(乱序):%@", resultBreak);
打印
// 版本号比较
NSString *num1 = @"5.2.7";
NSString *num2 = @"5.3.6";
if ([num1 compare:num2 options:NSNumericSearch] == NSOrderedDescending) {
NSLog(@"%@ is bigger",num1);
} else {
NSLog(@"%@ is bigger",num2);
}
/*
注意:
- (NSComparisonResult)compare:(NSString *)string;
- (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask;
- (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask range:(NSRange)rangeOfReceiverToCompare;
- (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask range:(NSRange)rangeOfReceiverToCompare locale:(nullable id)locale;
1.options:(NSStringCompareOptions)mask 是枚举值
typedef NS_OPTIONS(NSUInteger, NSStringCompareOptions) {
NSCaseInsensitiveSearch = 1, 不区分大小写比较
NSLiteralSearch = 2, 区分大小写比较
NSBackwardsSearch = 4, 从字符串末尾开始搜索
NSAnchoredSearch = 8, 搜索限制范围的字符串
NSNumericSearch = 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
};
2.range:(NSRange)
比较字符串的范围
结构变量:
location: 需要比较的字串起始位置(以0为起始)
length: 需要比较的字串长度
3.返回值
typedef enum _NSComparisonResult {
NSOrderedAscending = -1, // < 升序
NSOrderedSame, // = 等于
NSOrderedDescending // > 降序
} NSComparisonResult;
*/
打印结果