Search code examples
iosobjective-ciphonensarraynsdictionary

Check if the value of key in an array of objects is same iOS?


I'd an NSArray with some dictionaries.which has some keys and values.which I'm showing in a tableview. I'd put the section header title is one of the value of a key in that dictionary i.e. like ddDate value. The problem is the same ddDate values needs to come under the same section. So I need to create my array according to that.

responseDict (
        {
        xx = 16;
        yy = 17;
        aa = 0;
        bb = 6;
        cc = 2016;
       ddDate = "17-06-2016";
    },
        {
        xx = 17;
        yy = 17;
        aa = 0;
        bb = 6;
        cc = 2016;

        ddDate = "17-06-2016";

    },
        {
        xx = 18;
        yy = 17;
        aa = 0;
        bb = 6;
        cc = 2016;

        ddDate = "18-06-2016";

    }

ie date is the section title. And those who had the same ddDate values under one section. Can anybody guide me how I can achieve this?


Solution

  • Your goal is to build two data structures; An array of ddDate values; this will be your section information and a dictionary of arrays, keyed by the ddDate values; this will be your row data.

    @property (strong, nonatomic) NSArray *sections;
    @property (strong, nonatomic) NSDictionary *rows;
    
    - (void)processJSONData:(NSArray *)inputArray {
    
        NSMutableDictionary *extractedData = [NSMutableDictionary new];
        for (NSDictionary *dict in inputArray) {
            NSString *ddDate = dict["ddDate"];
            NSMutableArray *rowArray = extractedData[ddDate];
            if (rowArray == nil) {
                rowArray = [NSMutableArray new];
                extractedData[ddDate] = rowArray;
            }
            [rowArray addObject:dict];
        }
    
        self.sections = [extractedData allKeys];
        self.rows = [NSDictionary dictionaryWithDictionary:extractedData];
    }
    

    You might like to sort the self.sections array.

    The number of sections is self.sections.count and the number of rows in a section are self.rows[self.sections[indexPath.section]].count