在Date属性上对对象的NSArray进行排序

时间:2014-05-19 18:35:57

标签: ios objective-c sorting nsarray

我正在尝试根据日期属性对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日

因此,正确订购了年份,月份和日期都是错误的

非常感谢任何帮助。

3 个答案:

答案 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:)];