2015-06-10 3 views
1

У меня возникла проблема с сортировкой.Сортировка с использованием NSSortDescriptor

Данные как этот

NSArray* testArr = @[@{@"key":@"aaa", @"value":@"asdfaf"}, 
        @{@"key":@"baa", @"value":@"bsdfaf"}, 
        @{@"key":@"!!aaa", @"value":@"adsfdfaf"}, 
        @{@"key":@"123aaa", @"value":@"cecdfaf"}, 
        @{@"key":@"@@#21", @"value":@"a42faf"}, 
        @{@"key":@"ace", @"value":@"a123faf"}, 
        @{@"key":@"321!!", @"value":@"123sdfaf"}, 
        ]; 

И NSSortDescriptor подобно этому

NSLocale *locale = [NSLocale autoupdatingCurrentLocale];   
NSSortDescriptor *sortUsingNameDescriptor = [[NSSortDescriptor alloc] initWithKey:@"key" ascending:YES comparator:^NSComparisonResult(id obj1, id obj2) { 

    NSStringCompareOptions comparisonOptions = NSCaseInsensitiveSearch | NSWidthInsensitiveSearch | NSForcedOrderingSearch | NSNumericSearch; 
    NSRange stringRange = NSMakeRange(0, ((NSString *)obj1).length); 

    return [(NSString*)obj1 compare:(NSString*) obj2 options:comparisonOptions range:stringRange locale:locale]; 
    }]; 

это результат.

{ 
    key = "!!aaa"; 
    value = adsfdfaf; 
}, 
    { 
    key = "@@#21"; 
    value = a42faf; 
}, 
    { 
    key = 123aaa; 
    value = cecdfaf; 
}, 
    { 
    key = "321!!"; 
    value = 123sdfaf; 
}, 
    { 
    key = aaa; 
    value = asdfaf; 
}, 
    { 
    key = ace; 
    value = a123faf; 
}, 
    { 
    key = baa; 
    value = bsdfaf; 
} 

Но я хочу, чтобы отсортировать его как этот

{ 
    key = aaa; 
    value = asdfaf; 
}, 
    { 
    key = ace; 
    value = a123faf; 
}, 
    { 
    key = baa; 
    value = bsdfaf; 
}, 
{ 
    key = 123aaa; 
    value = cecdfaf; 
}, 
{ 
    key = "321!!"; 
    value = 123sdfaf; 
}, 
{ 
    key = "!!aaa"; 
    value = adsfdfaf; 
}, 
{ 
    key = "@@#21"; 
    value = a42faf; 
} 

Это алфавит, номер и специальный последовательность голец. Как я могу это сделать

ответ

1
NSSortDescriptor* sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:nil ascending:NO selector:@selector(localizedCompare:)]; 
NSArray* sortedArray = [inFileTypes sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]]; 
+0

Это не работает, потому что восходящий НЕТ. И если это ДА, результат будет таким же. Спасибо :) –

+0

если вы хотите обратный порядок Array объект, то [эта ссылка] (http://stackoverflow.com/a/586483/2771713) поможет вам. –