2013-11-14 2 views
0

У меня есть NSArray из NSDictionary unsortedArray выглядеть следующим образом:Отсортировать NSArray из NSDictionary

( 
    {symbol = "ABC"; price = "9.01";} 
    {symbol = "XYZ"; price = "3.45";} 
    ... 
    (

Здесь есть сортировка код:

NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"price" ascending:YES]; 
    NSArray *sortDescriptors = [NSArray arrayWithObject:descriptor]; 
    NSArray *sortArray = [unsortedArray sortedArrayUsingDescriptors:sortedDescriptors]; 

    NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"symbol" ascending:YES]; 
    NSArray *sortDescriptors = [NSArray arrayWithObject:descriptor]; 
    NSArray *sortArray = [unsortedArray sortedArrayUsingDescriptors:sortedDescriptors]; 

сортировочных результатов для ключа символа в порядке, но для ключа цен не сортируется. Что может быть неправильным? Цена указана в NSString, но вы хотите отсортировать его как

3.45 
    9.01 
    ... 

Заранее спасибо.

+1

Это не похоже на ваш фактический код: вы используете имя переменной 'sortedDescriptors', которая не определена в коде выше. Отправьте фактический код. – Monolo

+0

«Что может быть неправильно?» Ну, что * * * не так? В конце концов, две цены сортируются должным образом. –

ответ

2

Использование NSNumber для цены в словаре и дескриптор сортировки будет работать с численным значением, а не как строка, например.

NSArray *dictArray = @[ @{@"symbol" : @"ABC", @"price" : @9.01}, 
         @{@"symbol" : @"XYZ", @"price" : @3.45} ]; 

или, если цена является строкой

NSArray *dictArray = @[ @{@"symbol" : @"ABC", @"price" : @"9.01"}, 
         @{@"symbol" : @"XYZ", @"price" : @"3.45"} ]; 

использовать компаратор, который необходимо сравнить цену пары словарей, например,

NSArray *sortedArray = [dictArray 
         sortedArrayUsingComparator:^NSComparisonResult(NSDictionary *dict1, 
                     NSDictionary *dict2) { 

    double price1 = [[dict1 valueForKey:@"price"] doubleValue]; 
    double price2 = [[dict2 valueForKey:@"price"] doubleValue]; 

    if(price1 > price2) 
     return (NSComparisonResult)NSOrderedDescending; 

    if(price1 < price2) 
     return (NSComparisonResult)NSOrderedAscending; 

    return (NSComparisonResult)NSOrderedSame; 

}]; 
+0

спасибо. Но unsortedArray уже существует. Мне нужно отсортировать этот массив. – user2543991

+0

Я изменил свой ответ, чтобы включить сортировку, используя компаратор, чтобы правильно сортировать числа, хранящиеся в виде строк – SPA

+0

Еще раз спасибо. Оно работает. – user2543991

Смежные вопросы