2012-07-07 62 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];