我一直在努力寻找一种简单的方法来对包含NSDictionaries的NSMutableArray进行排序。每个NSDictionary都有一个名为“Date”的键,其中包含一个日期的NSString(例如:2014年10月15日)。
我要做的是根据这些字符串按升序对数组进行排序。
我试过这个没有运气:
NSComparisonResult dateSort(NSString *s1, NSString *s2, void *context) {
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"MM/dd/yy"];
NSDate *d1 = [formatter dateFromString:s1];
NSDate *d2 = [formatter dateFromString:s2];
return [d1 compare:d2]; // ascending order
return [d2 compare:d1]; // descending order
}
我也试过这个没有运气:
NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"interest" ascending:YES];
stories=[stories sortedArrayUsingDescriptors:[NSArray arrayWithObjects:descriptor,nil]];
recent = [stories copy];
每种方式都会导致崩溃,我认为这是因为它是NSString而不是NSDate,但我对如何执行此操作感到茫然。
有人能告诉我完成此任务的正确方法吗?
这就是我调用第一个代码块的方式:
theDictionaries = [[theDictionaries sortedArrayUsingFunction:dateSort context:nil] mutableCopy];
答案 0 :(得分:12)
你需要在字典中找到字符串。看起来你正试图比较字典本身。如果你有一个名为data的数组,你可以这样做,
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"MM/dd/yyyy"];
self.data = [self.data sortedArrayUsingComparator:^NSComparisonResult(NSDictionary *obj1, NSDictionary *obj2) {
NSDate *d1 = [formatter dateFromString:obj1[@"date"]];
NSDate *d2 = [formatter dateFromString:obj2[@"date"]];
return [d1 compare:d2]; // ascending order
return [d2 compare:d1]; // descending order
}];
NSLog(@"%@",self.data);
答案 1 :(得分:0)
如果要使用Model Class进行排序,则必须使用它。
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd hh:mm a"];
finalCompleteArray = [finalCompleteArray sortedArrayUsingComparator:^NSComparisonResult(MessageChat *obj1, MessageChat *obj2) {
NSDate *d1 = [formatter dateFromString:obj1.LastDate];
NSDate *d2 = [formatter dateFromString:obj2.LastDate];
NSLog(@"[d1 compare:d2] %ld",(long)[d1 compare:d2]);
NSLog(@"[d2 compare:d1] %ld",(long)[d2 compare:d1]);
return [d2 compare:d1]; // descending order
}];
NSLog(@"%@",finalAssignedArray);