我一直在努力寻找一种简便的方法来对包含NSDictionaries的NSMutableArray进行排序。每个NSDictionary都有一个名为“Date”的 key ,其中包含一个日期的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];

最佳答案

您需要将字符串放入词典中。看来您正在尝试比较字典本身。如果您有一个名为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);

关于ios - 按键中的字符串日期对NSDictionaries的NSArray进行排序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21445895/

10-16 16:22