-1

how to sort this Array contains date and time, i need to sort for same dates ,if i have same dates multiple entries i need to sort it in decreasing order based on the time and it will be shown in dressing order all the entries.

    data= {
     {
            dateAndTime = "04/03/2017 09:52 PM";
            deviceImage = "";
            dialOrReceive = 0;
            number = "+918839752179";
            profilePhoto = "";
        },
            {
            dateAndTime = "02/03/2017 06:54 PM";
            deviceImage = "";
            deviceImage = "";
            dialOrReceive = 0;
            number = "+918839752179";
            profilePhoto = "";
        },
            {
            dateAndTime = "04/03/2017 05:36 PM";
            deviceImage = "";
            dialOrReceive = 0;
            number = "+918839752179";
            profilePhoto = "";
        },
            {
            dateAndTime = "03/03/2017 04:48 PM";
            deviceImage = "";
            dialOrReceive = 0;
            number = "+918839752179";
            profilePhoto = "";
        }, {
            dateAndTime = "03/03/2017 06:48 PM";
            deviceImage = "";
            dialOrReceive = 0;
            number = "+918839752179";
            profilePhoto = "";
        },{
            dateAndTime = "02/03/2017 09:36 PM";
            deviceImage = "";
            dialOrReceive = 0;
            number = "+918839752179";
            profilePhoto = "";
        },
}
  • Any attempts, what did you try? please post code snippets – Maxim Shoustin Mar 05 '17 at 07:34
  • The object for key `data` seems to be an array, not a dictionary. You need to map the date strings to `NSDate` to be able to sort the array. – vadian Mar 05 '17 at 07:35
  • i am sorting the the dates successfully : NSSortDescriptor* sortOrder = [NSSortDescriptor sortDescriptorWithKey: @"dateAndTime" ascending: NO]; arr=[arr sortedArrayUsingDescriptors: [NSArray arrayWithObject: sortOrder]]; –  Mar 05 '17 at 07:35
  • for time i am getting issues :( –  Mar 05 '17 at 07:37
  • @kumar what means "dressing order"? – schmidt9 Mar 05 '17 at 08:16
  • Possible duplicate of [Sort NSArray of date strings or objects](http://stackoverflow.com/questions/1132806/sort-nsarray-of-date-strings-or-objects) – Larme Mar 05 '17 at 11:01
  • I need sorted order: LIKE. 04/03/2017 09:52 PM 04/03/2017 05:36 PM 03/03/2017 06:48 PM 03/03/2017 04:48 PM 02/03/2017 09:36 PM 02/03/2017 06:54 PM –  Mar 06 '17 at 13:04

1 Answers1

1

Try this

- (void)sortDict {

    NSDictionary *dict = @{
                           @"data" : @[@{
                                           @"dateAndTime" : @"04/03/2017 09:52 PM",
                                           @"deviceImage" : @"",
                                           @"dialOrReceive" : @0,
                                           @"number" : @"+918839752179",
                                           @"profilePhoto" : @""
                                           },
                                       @{
                                           @"dateAndTime" : @"02/03/2017 06:54 PM",
                                           @"deviceImage" : @"",
                                           @"dialOrReceive" : @0,
                                           @"number" : @"+918839752179",
                                           @"profilePhoto" : @""
                                           },
                                       @{
                                           @"dateAndTime" : @"04/03/2017 05:36 PM",
                                           @"deviceImage" : @"",
                                           @"dialOrReceive" : @0,
                                           @"number" : @"+918839752179",
                                           @"profilePhoto" : @""
                                           },
                                       @{
                                           @"dateAndTime" : @"03/03/2017 04:48 PM",
                                           @"deviceImage" : @"",
                                           @"dialOrReceive" : @0,
                                           @"number" : @"+918839752179",
                                           @"profilePhoto" : @""
                                           },
                                       @{
                                           @"dateAndTime" : @"03/03/2017 06:48 PM",
                                           @"deviceImage" : @"",
                                           @"dialOrReceive" : @0,
                                           @"number" : @"+918839752179",
                                           @"profilePhoto" : @""
                                           },
                                       @{
                                           @"dateAndTime" : @"02/03/2017 09:36 PM",
                                           @"deviceImage" : @"",
                                           @"dialOrReceive" : @0,
                                           @"number" : @"+918839752179",
                                           @"profilePhoto" : @""
                                           },
                                       @{
                                           @"dateAndTime" : @"02/03/2017 07:36 AM",
                                           @"deviceImage" : @"",
                                           @"dialOrReceive" : @0,
                                           @"number" : @"+918839752179",
                                           @"profilePhoto" : @""
                                           }
                                       ]
                            };

    NSDateFormatter *formatter = [NSDateFormatter new];
    formatter.dateFormat = @"dd/MM/yyyy hh:mm a";

    NSArray *arr = [dict objectForKey:@"data"];

    arr = [arr sortedArrayUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {

        NSDate *date1 = [formatter dateFromString:[obj1 objectForKey:@"dateAndTime"]];
        NSDate *date2 = [formatter dateFromString:[obj2 objectForKey:@"dateAndTime"]];

        return [date2 compare:date1];
    }];

    NSLog(@"%@", arr);
}
schmidt9
  • 4,436
  • 1
  • 26
  • 32
  • Thank You @schmidt9 –  Mar 05 '17 at 10:44
  • I am sorting but its nor coming in proper way time not sorting properly @schmidt9 –  Mar 06 '17 at 12:47
  • @kumar once again what sorting order do you need for dates and what for time? – schmidt9 Mar 06 '17 at 12:52
  • I need sorted order: LIKE. 04/03/2017 09:52 PM 04/03/2017 05:36 PM 03/03/2017 06:48 PM 03/03/2017 04:48 PM 02/03/2017 09:36 PM 02/03/2017 06:54 PM –  Mar 06 '17 at 13:04
  • @kumar ok I edited my answer, it outputs exactly in this order, I added one more record to check for AM case – schmidt9 Mar 06 '17 at 13:17