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;
     }
     */
相關文章
相關標籤/搜索