Сортировка NSDictionary по дате в iphone

У меня есть словарь вроде:

{
    "2014-04-12" =     (
                {
            "can_remove" = 1;
            "date_created" = "12-04-2014 04:23:57";
            "is_connected" = 0;
            name = "J J";
            status = gbn;
            "user_id" = 94;
        }
    );
    "2014-04-14" =     (
                {
            "can_remove" = 0;
            "date_created" = "14-04-2014 02:36:52";
            "is_connected" = 0;
            name = abc;
            "user_id" = 89;
        }
    );
}

Ключи этого словаря представляют даты. Как я могу отсортировать это по дате?

Я пробовал это, но это не работает:

NSArray* keys = [dict allKeys];
    NSArray* sortedArray = [keys sortedArrayUsingComparator:^(id a, id b) {
        return [a compare:b options:NSNumericSearch];
}];

person user2893370    schedule 14.04.2014    source источник


Ответы (3)


Используйте следующий способ сортировки словаря по дате:

NSMutableArray *dictKeys = [[dict allValues] mutableCopy];

[dictKeys sortUsingComparator: (NSComparator)^(NSDictionary *a, NSDictionary *b) 
  {
    NSString *key1 = [a objectForKey: @"field3"];  
    NSString *key2 = [b objectForKey: @"field3"];

    return [key1 compare: key2];
  }
];

NSLog (@"dictKeys - %@",dictKeys);
person Rigel Networks    schedule 14.04.2014
comment
Но откуда у меня массив отсортированных ключей? - person user2893370; 14.04.2014
comment
NSLog(@%@,sortedArray); здесь можно получить. Проверить обновленный код - person Rigel Networks; 14.04.2014
comment
[__NSCFString objectForKeyedSubscript:]: нераспознанный селектор отправлен экземпляру 0x1748b250 - person user2893370; 14.04.2014
comment
@ user2893370: Вам нужно делать основные вещи самостоятельно. Нельзя требовать готовых решений. Мы можем просто направить вас. - person Parth Bhatt; 14.04.2014

попробуйте этот код:

NSArray *sortedArray = [[myDict allKeys] sortedArrayUsingSelector:@selector(compare:)];
person kirti Chavda    schedule 14.04.2014
comment
Разве это не эквивалентно тому, что он сделал в любом случае? - person Hermann Klecker; 14.04.2014
comment
Спасибо за ваш ответ... Я уже пробовал это.. Но получил ответ <__NSArrayI 0x1d015d30>( 2014-04-12, 2014-04-14 ) - person user2893370; 14.04.2014
comment
@ user2893370, что не так с этим результатом? Это именно то, что я ожидал. Вы создали массивы с ключами и отсортировали их по ключу. Иди оттуда. - person Hermann Klecker; 14.04.2014

проверьте этот код..

// currentDic has all data.

NSArray * tempArray = currentDic.allKeys;

NSDateFormatter * formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd"];

NSArray * sortedArray = [tempArray sortedArrayUsingComparator:^NSComparisonResult(NSString * obj1, NSString * obj2) {
    NSDate * firstDate = [formatter dateFromString:obj1];
    NSDate * secondDate = [formatter dateFromString:obj2];

    return [firstDate compare:secondDate];

}];

если вам это нужно как словарь, то

  NSMutableDictionary * resultingDic = [NSMutableDictionary dictionary];
  [sortedArray enumerateObjectsUsingBlock:^(NSString * obj, NSUInteger idx, BOOL *stop) {

    resultingDic[obj] = currentDic[obj];
}];
person Rajath Shetty K    schedule 14.04.2014