【问题标题】:Sorting the array ,it contains Date,month排序数组,它包含日期,月份
【发布时间】:2014-12-15 12:13:03
【问题描述】:

我想根据日期和月份值对数组进行排序。我正在使用此代码

 NSSortDescriptor *descriptor=[[NSSortDescriptor alloc]initWithKey:@"self" ascending:YES];
    NSArray *descriptors=[NSArray arrayWithObject:descriptor];
    revereseorder=[dateAarray sortedArrayUsingDescriptors:descriptors];
    NSLog(@"date order %@",revereseorder);

我收到如下回复:

 date order (
    "01-11-2014",
    "01-12-2014",
    "02-11-2014",
    "02-12-2014",
    "03-11-2014",
    "03-12-2014",
    "04-11-2014",
    "04-12-2014",
    "05-11-2014",
    "05-12-2014",
    "06-11-2014",
    "06-12-2014",
    "07-11-2014",
    "07-12-2014",
    "08-11-2014",
    "08-12-2014",
    "09-11-2014",
    "09-12-2014",
    "10-11-2014",
    "10-12-2014",
    "11-11-2014",
    "11-12-2014",
    "12-11-2014",
    "12-12-2014",
    "13-11-2014",
    "13-12-2014",
    "14-11-2014",
    "15-11-2014",
    "16-11-2014",
    "17-11-2014",
    "18-11-2014",
    "19-11-2014",
    "20-11-2014"

)

但我需要根据当前月份将响应当前日期显示为降序。您能否建议我如何解决?谢谢@

【问题讨论】:

  • 您需要将日期转换为NSDate 对象,因为它们不是按字符串排序的字符串。
  • 2015 年你会遇到麻烦。你不需要将日期转换为 NSDate,但你应该使用 yyyy-MM-dd 格式。 “我需要根据当前月份以降序显示响应当前日期”有点难以解析——你能解释得更好吗?
  • 当然是@HotLicks,好的,我将使用 YYYY-MM-DD 格式,谢谢。
  • @iOS2340 或者您可以在我的回答中使用代码。这意味着您无需更改任何内容,它适用于任何年、月、日等... :)

标签: ios objective-c arrays sorting


【解决方案1】:

如果您想正确地对字符串进行排序,您需要将字符串转换为实际的 NSDate 对象。

您可以使用比较器功能对它们进行排序...

NSArray *dateStringArray = //your array...

NSDateFormatter *dateFormatter = [NSDateFormatter new];
dateFormatter.dateFormat = @"dd-MM-yyyy";

NSArray *sortedArray = [dateStringArray sortedArrayUsingComparator:^(NSString *string1, NSString *string2) {
    NSDate *date1 = [dateFormatter dateFromString:string1];
    NSDate *date2 = [dateFormatter dateFromString:string2];

    return [date1 compare:date2];
}];

如果你想要降序,那么只需将比较器的最后一行更改为...

return [date2 compare:date1];

【讨论】:

  • 你的代码很好@Fogmeister,但未使用 sortedArray 有一个警告,即未使用变量排序数组。
  • 嗯,是的,如果您不使用排序数组,那么您将收到该警告。您可以将其更改为dateStringArray = blah...。因为我假设您使用的是NSArray 而不是NSMutableArray,所以您不能直接对数组进行排序。您必须从排序后的数组创建一个新数组。
【解决方案2】:

试试这个:

NSDateFormatter *fmtdt = [[NSDateFormatter alloc] init];
[fmtdt setDateFormat:@"dd-MM-yyyy"];
NSComparator compareTimes = ^(id string1, id string2)
{
    NSDate *time1 = [fmtdt dateFromString:string1];
    NSDate *time2 = [fmtdt dateFromString:string2];
    return [time1 compare:time2];
};
NSSortDescriptor * sortDesc = [NSSortDescriptor sortDescriptorWithKey:nil ascending:YES comparator:compareTimes];
[yourArray sortUsingDescriptors:@[sortDesc]];

【讨论】:

    【解决方案3】:

    NSDateFormatter 是一种简单的方法,但如果您不想使用 NSDateFormatter,则必须将每个日期标记为 '-' 并排序,但这需要更多处理。

    NSArray *token = [字符串 componentsSeparatedByString:@"-"];

    【讨论】:

      猜你喜欢
      • 2012-07-04
      • 1970-01-01
      • 1970-01-01
      • 2017-05-26
      • 1970-01-01
      • 2018-01-30
      • 1970-01-01
      • 2019-11-12
      • 2011-08-16
      相关资源
      最近更新 更多