我正在尝试根据日期属性对NSArray
个对象进行排序。我正在寻找的订单是最近的日期,以最早的日期结束。
e.g 2014年5月15日 2014年5月12日 2014年2月20日 25/12/2013 二〇一三年十月一十一日
我尝试了在“This”主题中接受的答案中看到的许多不同方法。
但我的订单是关闭的,例如
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"dateToPay" ascending:YES];
NSArray *orderedArray = [cashFlowItemsArray sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];
self.cashFlowItems = orderedArray;
正在返回:
2014年2月20日
2014年5月12日
2014年5月15日
二○一三年十月十一日
2013年12月25日
因此,正确订购了年份,月份和日期都是错误的
非常感谢任何帮助。
答案 0 :(得分:0)
可能重复:Sort NSArray of date strings or objects
他基本上声明(假设您的数组填充了NSDate对象)以使用compare:selector作为日期。所以这样做:
NSArray *orderedArray = [dateArray sortedArrayUsingSelector:@selector(compare:)];
他说:
这比创建NSSortDescriptor简单,而且更简单 而不是写自己的比较功能。 (NSDate对象知道如何 至少尽可能有效地将自己相互比较 希望用自定义代码完成。)
答案 1 :(得分:0)
检查一下,我已经测试了你的代码
NSArray *stringDateArray = @[@"05/15/2014",@"05/12/2014",@"02/20/2014",@"05/12/2013",@"10/11/2013"];
NSMutableArray *dateArray = [NSMutableArray arrayWithCapacity:[stringDateArray count]];
for (NSString *dateString in stringDateArray) {
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MM/dd/yyyy"];
[dateArray addObject:@{@"date":[dateFormatter dateFromString:dateString]}];
}
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:YES];
NSArray *orderedArray = [dateArray sortedArrayUsingDescriptors:@[sortDescriptor]];
NSLog(@"ordered array--%@",orderedArray);
带有比较选择器的有序数组 - ( { date =" 2013-05-11 18:30:00 + 0000&#34 ;; }, { date =" 2013-10-10 18:30:00 + 0000&#34 ;; }, { date =" 2014-02-19 18:30:00 + 0000&#34 ;; }, { date =" 2014-05-11 18:30:00 + 0000&#34 ;; }, { date =" 2014-05-14 18:30:00 + 0000&#34 ;; } )
NSArray *stringDateArray = @[@"05/15/2014",@"05/12/2014",@"02/20/2014",@"05/12/2013",@"10/11/2013"];
NSMutableArray *dateArray = [NSMutableArray arrayWithCapacity:[stringDateArray count]];
for (NSString *dateString in stringDateArray) {
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MM/dd/yyyy"];
[dateArray addObject:[dateFormatter dateFromString:dateString]];
}
NSArray *orderedArray = [dateArray sortedArrayUsingSelector:@selector(compare:)];
NSLog(@"ordered array--%@",orderedArray);
有序数组 - ( " 2013-05-11 18:30:00 + 0000", " 2013-10-10 18:30:00 + 0000", " 2014-02-19 18:30:00 + 0000", " 2014-05-11 18:30:00 + 0000", " 2014-05-14 18:30:00 + 0000" )
答案 2 :(得分:0)
使用以下代码将您的数组放入NSDate数组:
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"MM/dd/yyyy"];
NSDate *myDate = [df dateFromString: @"02/20/2014"];
然后:
[dateArray sortUsingSelector: @selector(compare:)];