2016-07-26 3 views
-2

Я ниже NSMutableArrayСортировать NSMutableArray с ключевым значением

Я хочу, чтобы отсортировать элементы массива в соответствии с DOBDate в порядке возрастания

Сортировать по имени ключа в алфавитном порядке.

myarraytosort":[ 
    {“DOBDate":"Jul 18, 1987”,”Name”:”Aman Singh”}, 
    {“DOBDate”:”Dec 18, 2000”,”Name”:”Dman Kumar”}, 
    {“DOBDate”:”June 18, 1990”,”Name”:”Cman Singh”}, 
    nil 
] 

код Стараюсь, но не работает

для DOBDate

NSSortDescriptor *dateDescriptor = [NSSortDescriptor 
              sortDescriptorWithKey:@"DOBDate" 
              ascending:NO]; 
     NSArray *sortDescriptors = [NSArray arrayWithObject:dateDescriptor]; 
     NSArray *sortedEventArray = [myarraytosort 
            sortedArrayUsingDescriptors:sortDescriptors]; 
     NSLog(@"sortedEventArray == %@", sortedEventArray); 

Для алфавита

NSSortDescriptor *dateDescriptor = [NSSortDescriptor 
              sortDescriptorWithKey:@"Name" 
              ascending:YES]; 
     NSArray *sortDescriptors = [NSArray arrayWithObject:dateDescriptor]; 
     NSArray *sortedEventArray = [myarraytosort 
            sortedArrayUsingDescriptors:sortDescriptors]; 
     NSLog(@"sortedEventArray == %@", sortedEventArray); 
+0

Проверить это http://stackoverflow.com/questions/805547/how-to-sort-an-nsmutablearray-with-custom-objects-in-it?rq=1 –

+4

Было бы лучше использовать ' NSDate' вместо объекта NSString для представления даты. Кроме того, вы должны использовать 'sortUsingComparator:' и пользовательский компаратор (с 'NSDateFormatter'). – Larme

ответ

1

Ваш DOBDate ключ содержит дату в строке формиата, так что вам нужно сортировать дату используя Comparator вот так

NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
    [df setDateFormat:@"MMM dd, yyyy"]; 
NSArray *sortedArray = [yourArray sortedArrayUsingComparator:^NSComparisonResult(NSDictionary *obj1, NSDictionary *obj2) { 
    NSDate *d1 = [df dateFromString:(NSString*) [obj1 valueForKey:@"DOBDate"]]; 
    NSDate *d2 = [df dateFromString:(NSString*) [obj2 valueForKey:@"DOBDate"]]; 
    return [d1 compare: d2]; 
}]; 
+0

return [d1 compare: d2]; отлично работает – iphonemaclover

+0

Приветствуем друга Счастливого кодирования :) –

+0

Я бы порекомендовал поставить 'df' вне' NSComparisonResult() ', потому что alloc/init' NSDateFormatter' - это время (и процессор), потребляющее и всегда одно и то же , – Larme

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