【问题标题】:How to sort NSMutableArray of date objects如何对日期对象的 NSMutableArray 进行排序
【发布时间】:2023-04-11 12:01:01
【问题描述】:

我正在做一些对 NSMutableArray 中的日期字符串进行排序的小工作,我正在从 sqlite db 获取数组。 如果你打印它显示的数组是这样的

日期字符串是 ( "2011-05-01", "2011-02-01", "2012-01-08", "2012-05-08", "2010-01-09 )

我想按升序显示日期。请帮帮我......我是objc的新手......

【问题讨论】:

    标签: ios iphone objective-c nsdate nssortdescriptor


    【解决方案1】:

    首先您应该将所有日期字符串(即NSString)对象转换为NSDate 对象,然后对这些dateObjects 进行排序。

    我相信你有 dateArray 包含所有这些字符串。

    NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"self" 
                                                               ascending:NO];
    NSArray *descriptors = [NSArray arrayWithObject:descriptor];
    NSArray *reverseOrder = [dateArray sortedArrayUsingDescriptors:descriptors];
    

    NSArray *reverseOrderUsingComparator = [dateArray sortedArrayUsingComparator: 
                                           ^(id obj1, id obj2) {
                                               return [obj2 compare:obj1];
                                           }];
    

    【讨论】:

    • 他在问题中显示的日期格式即使是字符串也会正确排序。
    • 没必要,他可以把字符串按现在的样子排列。
    • 很好,谢谢伙计....我使用了你的第二个,但它以降序显示数组对象...我怎样才能升序
    【解决方案2】:

    如果您的日期确实是 YYYY-mm-dd 格式的字符串,就像您的问题一样,那么这将按升序对它们进行排序:

    [arrayOfDates sortUsingSelector:@selector(compare:)];
    

    如果您的日期实际上是 NSDate 对象,这也将起作用。

    如果要创建数组的排序副本:

    NSArray *sortedArray = [arrayOfDates sortedArrayUsingSelector:@selector(compare:)];
    

    【讨论】:

      【解决方案3】:

      一般来说,排序应该由数据库完成。 sqlite3 确实支持order by

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-17
        • 1970-01-01
        • 2011-11-22
        • 2020-06-02
        相关资源
        最近更新 更多