【问题标题】:Sort Array of Dictionaries by NSDate as inner key按 NSDate 作为内键对字典数组进行排序
【发布时间】:2015-07-26 03:30:24
【问题描述】:

我想按日期对以下数组进行排序。我尝试了几种方法,但没有奏效。这里的日期字符串是字典的内键。

数组是这样的

{
    message =         {
        "created_at" = "2015-07-23T07:18:42.315Z";
        "created_at_time_ago" = 3ds;
        direction = sent;
    };
},
    {
    message =         {
        "created_at" = "2015-07-21T02:58:23.461Z";
        "created_at_time_ago" = 5ds;
        direction = sent;
    };
},
    {
    message =         {
        "created_at" = "2015-07-19T13:32:22.111Z";
        "created_at_time_ago" = 7ds;
        direction = sent;
    };
},

我尝试了这段代码,但没有成功

#define KLongDateFormat @"yyyy-MM-dd'T'HH:mm:ss.SSSZZZZ"


NSDateFormatter *fmtDate = [[NSDateFormatter alloc] init];
[fmtDate setDateFormat:KLongDateFormat];
NSComparator compareDates = ^(id string1, id string2)
{
    NSDate *date1 = [fmtDate dateFromString:string1];
    NSDate *date2 = [fmtDate dateFromString:string2];

    return [date1 compare:date2];
};
NSSortDescriptor * sortDesc1 = [[NSSortDescriptor alloc] initWithKey:@"created_at" ascending:NO comparator:compareDates];
[arrSavedFeeds sortUsingDescriptors:@[sortDesc1]];

为什么这不起作用?

【问题讨论】:

    标签: ios objective-c iphone nsarray nssortdescriptor


    【解决方案1】:

    您不能使用NSSortDescriptor 按内部键对字典数组进行排序。为什么不直接使用 NSMutableArray 的 sortUsingComparator(_:) 方法并比较字典呢?

    NSComparator compareDates = ^(id dict1, id dict2)
    {
        NSDate *date1 = [fmtDate dateFromString:[[dict1 valueForKey:@"message"] valueForKey:@"created"]];
        NSDate *date2 = [fmtDate dateFromString:[[dict2 valueForKey:@"message"] valueForKey:@"created"]];
    
        return [date1 compare:date2];
    };
    
    [arrSavedFeeds sortUsingComparator:compareDates];
    

    【讨论】:

      【解决方案2】:

      看起来您正在使用ISO 8601,在这种情况下您可以节省一些计算,因为它可以按字典顺序排序(对于正年份)。

      在这种情况下,您可以使用以下排序描述符

      [NSSortDescriptor sortDescriptorWithKey:@"message.created_at" ascending:NO]
      

      【讨论】:

        猜你喜欢
        • 2011-11-22
        • 2018-12-22
        • 2016-04-17
        • 2016-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-25
        • 1970-01-01
        相关资源
        最近更新 更多