У меня есть NSMutableArray из NSMutableDictionary (объекты NSString). Один из объектов NSString на самом деле является датой, и мне нужно отсортировать NSMutableArray на основе этой даты, и я не хочу, чтобы он сортировал даты как строки. Как я могу это сделать?Как отсортировать NSMutableArray из NSMutableDictionary?
ответ
Если я правильно понял, ваш массив содержит словари, содержащие строки, и вы хотите сортировать по этим строкам ... как даты. Возможно, что-то вроде этого:
[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];
}];
Ну, NSMutableArray не имеет такого метода, как «sortWithOptions». – Walkor
Он был введен в 10.6 http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSMutableArray_Class/Reference/Reference.html#jumpTo_31 –
Вам необходимо будет использовать метод 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];
Примечание: Это не тестировалась.
Спасибо за ответ, я попробую. – Walkor
Я также рассмотрю создание классов для вашей модели данных, поскольку вы можете реализовать простой метод сравнения с объектами NSDate. Использование изменяемых словарей, подобных этому, часто может сбивать с толку, как только вы передадите определенный момент. –