排序 NSMutableArray 包含 NSArray using sortedArrayUsingComparato



我对nsdate数组进行排序时遇到问题。所以我在 nsmutablearray 中有日期数组

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSArray *arrString = [[NSArray alloc] initWithObjects:@"2012-05-01", @"2012-02-01", @"2012-22-03", @"2012-05-01", @"2012-15-01", nil];
NSMutableArray *arrDate = [[NSMutableArray alloc] initWithCapacity:arrString.count];
for (NSString *item in arrString) {
    NSDate *date = [dateFormatter dateFromString:item];
    [arrDate addObject:date];
}

正如我在很多情况下看到的那样,他们使用这样的代码对数组进行排序:

NSArray *sortedArray = [arrDate sortedArrayUsingComparator:^(id firstObject, id secondObject) {
    return [((NSDate *)firstObject) compare:((NSDate *)secondObject)];
}];

我试图将我的阵列放在上面,但没有奏效。任何人都可以帮助我如何对 nsmutablearray 进行排序的实际最佳方法包含 nsdate。我想将最新日期放在索引数组的顶部。

所以真正的问题是,如何在 arrDate 中对数据进行排序?

谢谢。

您的日期格式与您使用的日期字符串不匹配。

yyyy-MM-dd hh:mm:ss

表示您提供的日期应如下所示:

2012-05-09 15:54:21
        ^^ Day
     ^^ Month

即您的字符串缺少小时、分钟和秒,并且您有一些第 22 个月和第 15 个月的日期。 如果日期格式化程序无法解析日期,我认为它会返回 nil,这意味着您正在尝试将 nil 放入数组中,这将导致异常。

编辑

若要实际对日期进行排序,您的示例代码看起来不错,只是您希望首先使用最新的日期,因此请反转compare:

NSArray *sortedArray = [arrDate sortedArrayUsingComparator:^(id firstObject, id secondObject) {
     return [secondObject compare: firstObject];
}];   

或者使用可变数组,您可以就地排序:

[arrDate sortUsingComparator:^(id firstObject, id secondObject) {
     return [secondObject compare: firstObject];
}];    

相关内容

  • 没有找到相关文章