2012-07-07 64 views
3

我有一个由日期组成的数组,但是是NSString。如何降序排序?Objective-C排序字符串日期数组

编辑:我最终通过调整我的代码使用的NSDate使用其它方法将不会在我的情况下工作

+0

你有NSArray的字符串? – 2012-07-07 10:05:32

+0

是的,我已经与caseInsensitiveCompare:方法,但它返回升序不降序 – 2012-07-07 10:07:29

+0

是否有任何理由你不能使用NSDate *? – ratbum 2012-07-07 10:13:15

回答

10

你可以使用sortedArrayUsingFunction,考虑波纹管例如

NSString *str1 = @"03-07-2012"; 
NSString *str2 = @"01-07-2012"; 
NSString *str3 = @"02-07-2012"; 


NSArray *arr = [NSArray arrayWithObjects:str1, str2, str3, nil]; 
arr = [arr sortedArrayUsingFunction:dateSort context:nil]; 


//The date sort function 
NSComparisonResult dateSort(NSString *s1, NSString *s2, void *context) { 

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
    [formatter setDateFormat:@"dd-MM-yyyy"]; 

    NSDate *d1 = [formatter dateFromString:s1]; 
    NSDate *d2 = [formatter dateFromString:s2]; 

    return [d1 compare:d2]; // ascending order 
    return [d2 compare:d1]; // descending order 
} 
+0

或遵循相同的想法,因为caseInsensitiveCompare:返回预期的结果,但升序,你可以跳过格式化字符串作为日期,只是返回[s2 caseInsensitiveCompare:s1] – 2012-07-07 10:51:17

+0

,但它不会在字符串像2012年7月1日,1 -jun-2012 – 2012-07-07 10:52:23

+0

因此引入了我的回复。但在这个特殊的例子中,这实际上会起作用:) – 2012-07-07 11:06:52

2

隐蔽的NSString日期到NSDate对象和比基于日期的排序数组

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease]]; 
[dateFormatter setDateFormat:@"YYYY-MM-dd HH:mm:ss ZZZ"]; 

NSDate *date = [dateFormatter dateFromString:dateStr]; 

NSComparisonResult dateSort(NSString *s1, NSString *s2, void *context) { 
    NSDate *d1 = [NSDate dateWithString:s1]; 
    NSDate *d2 = [NSDate dateWithString:s2]; 
    return [d1 compare:d2]; 
} 

NSArray *sorted = [unsorted sortedArrayUsingFunction:dateSort context:nil];