-1

我有一系列日期。这些日期都是 NSString 对象。现在我想对它们进行排序。这就是我的功能的样子。

NSComparisonResult dateSort(NSString *s1, NSString *s2, void *context) {
    NSDateFormatter *df = [[NSDateFormatter alloc] init];
    [df setDateFormat:@"dd-MM-YYYY"];

    NSString *date1 = [NSString stringWithFormat:@"%@",s1];
    NSString *date2 = [NSString stringWithFormat:@"%@",s2];

    NSDate *v1 = [df dateFromString: date1];
    NSDate *v2 = [df dateFromString: date2];
   return [v1 compare:v2];

}

我这样调用函数。

NSArray *sortedKeys = [unsortedKeys sortedArrayUsingFunction:dateSort context:nil];

这是结果

sorted keys are (
    "24-10-2013",
    "28-06-2013",
    "03-10-2013",
    "20-12-2013",
    "04-09-2013",
    "19-09-2013",
    "07-07-2013",
    "15-09-2013",
    "01-07-2013",
    "04-11-2013",
    "27-06-2013",
    "02-10-2013",
    "05-08-2013",
    "17-10-2013",
    "04-10-2013"
)

这不是正确的顺序,我希望它们降序。

有人可以帮我吗?

4

1 回答 1

3

有几个问题:

  • 正确的日期格式是"dd-MM-yyyy".
  • 要按降序而不是升序排列日期,只需替换

    return [v1 compare:v2];
    

    经过

    return [v2 compare:v1];
    
  • 这些stringWithFormat电话完全没有必要(正如@rmaddy 评论的那样)。

  • 创建日期格式化程序被认为是一项昂贵的操作,它应该只做一次。

综上所述,您的比较方法应如下所示:

NSComparisonResult dateSort(NSString *s1, NSString *s2, void *context) {
    static NSDateFormatter *df;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        df = [[NSDateFormatter alloc] init];
        [df setDateFormat:@"dd-MM-yyyy"];
    });

    NSDate *v1 = [df dateFromString: s1];
    NSDate *v2 = [df dateFromString: s2];
    return [v2 compare:v1];
}
于 2013-07-31T07:11:11.963 回答