NSArray of Dates排序

Chr*_*irk 3 sorting iphone cocoa objective-c foundation

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

(
    "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"
)
Run Code Online (Sandbox Code Playgroud)

nal*_*all 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];
}
Run Code Online (Sandbox Code Playgroud)

NSArray 中有许多这样的排序方法.值得看看那些熟悉它们的人.

  • 为了效率,我主张在someObjectiveCMethod中创建NSDateFormatter,并将其作为上下文参数传递.或者,至少,不在dateSort中使用自动释放. (2认同)