2010-05-13 4 views
2

У меня есть NSMutableArray из NSMutableDictionary (объекты NSString). Один из объектов NSString на самом деле является датой, и мне нужно отсортировать NSMutableArray на основе этой даты, и я не хочу, чтобы он сортировал даты как строки. Как я могу это сделать?Как отсортировать NSMutableArray из NSMutableDictionary?

+1

Я также рассмотрю создание классов для вашей модели данных, поскольку вы можете реализовать простой метод сравнения с объектами NSDate. Использование изменяемых словарей, подобных этому, часто может сбивать с толку, как только вы передадите определенный момент. –

ответ

6

Если я правильно понял, ваш массив содержит словари, содержащие строки, и вы хотите сортировать по этим строкам ... как даты. Возможно, что-то вроде этого:

[someArray sortWithOptions: 0 usingComparator: ^(id inObj1, id inObj2) { 
    NSDate  *date1 = [NSDate dateWithString: [inObj1 objectForKey: @"dateString"]]; 
    NSDate  *date2 = [NSDate dateWithString: [inObj2 objectForKey: @"dateString"]]; 

    return [date1 compare: date2]; 
}]; 
+0

Ну, NSMutableArray не имеет такого метода, как «sortWithOptions». – Walkor

+0

Он был введен в 10.6 http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSMutableArray_Class/Reference/Reference.html#jumpTo_31 –

1

Вам необходимо будет использовать метод sortedArrayUsingFunction:context:. Например:

NSInteger comparator(NSDictionary *d1, NSDictionary *d2, void *context) 
{ 
    return [[d1 objectForKey:@"date"] compare:[d2 objectForKey:@"date"]]; 
} 

// In some method: 
NSArray *sortedArray = [array sortedArrayUsingFunction:comparator context:nil]; 

Примечание: Это не тестировалась.

+0

Спасибо за ответ, я попробую. – Walkor

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