sortingdatestring或对象的NSArray

我有一个NSArray包含datestring(即NSString),如下所示:“星期四,2009年5月21日19时10分09秒-0700”

我需要按datesortingNSArray 。 我想先把datestring转换成一个NSDate对象,但在那里如何按照NSDate对象进行sorting。

谢谢。

将date作为NSDate对象存储在NS(可变)数组中,然后使用-[NSArray sortedArrayUsingSelector:-[NSMutableArray sortUsingSelector:]并传递@selector(compare:)作为参数。 -[NSDate compare:]方法将按照升序排列date。 这比创buildNSSortDescriptor更简单,而且比编写自己的比较函数简单得多。 ( NSDate对象知道如何比较自己至less有效,我们可以用自定义代码完成。

如果我有一个types为NSDate的字段“beginDate”的对象的NSMutableArray我正在使用一个NSSortDescriptor如下:

 NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"beginDate" ascending:TRUE]; [myMutableArray sortUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]]; [sortDescriptor release]; 

你也可以使用如下的东西:

 //Sort the array of items by date [self.items sortUsingComparator:^NSComparisonResult(id obj1, id obj2){ return [obj2.date compare:obj1.date]; }]; 

但是,这确实假定date存储为一个NSDate而不是一个NString ,这应该是没有问题的做/做。 最好,我build议还以原始格式存储数据。 使在这种情况下操作更容易。

您可以使用块进行sorting:

 sortedDatesArray = [[unsortedDatesArray sortedArrayUsingComparator: ^(id a, id b) { NSDate *d1 = [NSDate dateWithString: s1]; NSDate *d2 = [NSDate dateWithString: s2]; return [d1 compare: d2]; }]; 

我build议你将所有的string转换为date,然后再进行sorting,而不是进行多次转换。 任何sortingalgorithm将给你更多的stringdate转换比数组中的项目数量(有时更多)

多一点块sorting: http : //sokol8.blogspot.com/2011/04/sorting-nsarray-with-blocks.html

你可以使用sortedArrayUsingFunction:context: 这是一个示例:

 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]; 

当使用NSMutableArray ,可以使用sortArrayUsingFunction:context:来代替。

一旦你有一个NSDate ,你可以用initWithKey:ascending:创build一个NSSortDescriptor initWithKey:ascending:然后使用sortedArrayUsingDescriptors:进行sorting。

在我的情况下,它的工作原理如下:

  NSArray * aUnsorted = [dataToDb allKeys];
     NSArray * arrKeys = [aUnsorted sortedArrayUsingComparator:^ NSComparisonResult(id obj1,id obj2){
         NSDateFormatter * df = [[NSDateFormatter alloc] init];
         [df setDateFormat:@“dd-MM-yyyy”];
         NSDate * d1 = [df dateFromString:(NSString *)obj1];
         NSDate * d2 = [df dateFromString:(NSString *)obj2];
        返回[d1比较:d2];
     }]; 

我有一个字典,其中所有的date格式为dd-MM-yyyy的键。 allKeys返回字典键未sorting,我想按时间顺序呈现数据。

改变这一点

 NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"beginDate" ascending:TRUE]; [myMutableArray sortUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]]; [sortDescriptor release]; 

 NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"Date" ascending:TRUE]; [myMutableArray sortUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]]; [sortDescriptor release]; 

只要改变钥匙:它一定是Date

Swift 3.0

 myMutableArray = myMutableArray.sorted(by: { $0.date.compare($1.date) == ComparisonResult.orderedAscending })