繁体   English   中英

按密钥中的字符串日期对NSDictionaries的NSArray进行排序?

[英]Sort NSArray of NSDictionaries by string date in key?

我一直在努力寻找一种简单的方法来对包含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];

你需要在你的词典中找到字符串。 看起来你正试图比较字典本身。 如果你有一个名为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);

如果要使用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);
  • 使用finalCompleteArrayMutableArray
  • 使用MessageChat是对象模型类文件
  • 使用obj1.LastDate是对象模型类变量

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM