NSArray排序问题

1. 比较两个字符串的大小

//第一个参数是要进行比较的字符串, 第二个参数是比较的方法, 是一个枚举的类型
- (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
}

2. 数组的排序问题

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;
     }
     */
相关文章
相关标签/搜索