2009-10-23 118 views
3

考虑这个数组。它没有密钥,所以我不确定我可以使用NSSortDescriptor。什么是排序他们的最佳方法?NSArray日期排序

(
    "Thursday, July 30, 2009", 
    "Monday, September 07, 2009", 
    "Wednesday, September 09, 2009", 
    "Friday, August 14, 2009", 
    "Saturday, September 05, 2009", 
    "Monday, August 10, 2009", 
    "Thursday, July 23, 2009", 
    "Monday, October 12, 2009", 
    "Friday, October 16, 2009", 
    "Monday, August 17, 2009", 
    "Tuesday, October 13, 2009", 
    "Wednesday, September 30, 2009", 
    "Sunday, August 16, 2009", 
    "Thursday, August 27, 2009", 
    "Monday, August 31, 2009", 
    "Saturday, August 15, 2009", 
    "Thursday, August 06, 2009", 
    "Saturday, September 26, 2009", 
    "Tuesday, September 29, 2009", 
    "Tuesday, September 15, 2009", 
    "Tuesday, September 01, 2009" 
) 

回答

12

您可以使用sortedArrayUsingFunction:

这里的一些示例代码。

NSInteger dateSort(id s1, id s2, void *context) 
{ 
    NSDateFormatter* format = (NSDateFormatter*)context; 
    NSDate* d1 = [format dateFromString:s1]; 
    NSDate* d2 = [format dateFromString:s2]; 

    return [d1 compare:d2]; 
} 

... 

-(void)someObjectiveCMethod 
{ 
    NSDateFormatter* format = [[[NSDateFormatter alloc] init] autorelease]; 

    // Find theses format codes here: 
    // http://unicode.org/reports/tr35/tr35-6.html#Date_Format_Patterns 
    // 
    [format setDateFormat:@"EEEE, MMMM dd, yyyy"]; 

    NSArray* myArray = getMyArray(); 
    NSArray* sortedArray = [myArray sortedArrayUsingFunction:dateSort context:format]; 
} 

在NSArray中有一个number of these sorts of sort methods。值得一看的人来熟悉它们。

+0

嗯......这实际上并没有对列表进行排序。将与它一起挖掘。 –

+2

为了提高效率,我主张在someObjectiveCMethod中创建NSDateFormatter,并将其作为上下文参数传递。或者,至少在dateSort中不使用autorelease。 –

+0

我修复了日期格式。对不起(需要咖啡)。 – nall

3
NSArray * unsortedDates = ...; 
NSArray * sortedDates = [unsortedDates sortedArrayUsingSelector:@selector(compare:)]; 
+0

哦,我的印象是阵列有NSStrings,而不是NSDates。如果它有NSDates,Dave的答案是正确的(少代码是好的)。 – nall

+0

哦,嘿,我甚至不认为他们可能是字符串。我只是假设一组看起来像日期的对象是日期,因为以其他方式存储日期会非常疯狂。 –

+0

是的,对不起,他们是字符串不是nsdates。 –