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 })