2015-07-26 2 views
0

Я хочу сортировать следующий массив по датам. Я попробовал несколько методов, но не работал. Здесь строка даты является внутренним ключом словаря.Сортировка массива словарей NSDate как внутренний ключ

массив подобен этому

{ 
    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]]; 

Почему это не работает?

ответ

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]; 
+0

Спасибо, это работает. – sajaz

0

Это выглядит, как вы используете ISO 8601 в этом случае вы можете сэкономить некоторые вычисления, как это может быть отсортированы в лексикографическом (для положительных лет).

В этом случае вы можете использовать следующие действия дескриптора SORT

[NSSortDescriptor sortDescriptorWithKey:@"message.created_at" ascending:NO] 
Смежные вопросы