Сортирайте 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