我有一系列日期。这些日期都是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"
)
这不是正确的顺序,我希望它们下降。
有人可以帮我吗?
答案 0 :(得分: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];
}