Search code examples
iosobjective-cnsmutablearraynsmutabledictionary

How to Insert data into NSMutableArray that is inside NSMutableDictionary inside NSMutableArray?


I have an NSMutableArray that contains several NSMutableDictionary object, each dict has a NSString and an NSMutableArray in it.

My problem is that I need to find the correct dict based on a string match and when found insert an object into the NSMutableArray in the same dict where the string match was found, I can only make this work the first time when the array is empty because after that I am unable to match the correct string:

Here is what I have tried so far, I tried using contains object but that wont get me inside the dict inside the array so I am stuck

NSMutableArray *variantOptions = [[NSMutableArray alloc] init];    

for (NSDictionary *variant in variantInfo) {
  NSMutableDictionary *variantOption = [[NSMutableDictionary alloc] init];
  NSMutableArray *variantOptionValues = [[NSMutableArray alloc] init];

  NSString *name = variant[@"name"];
  NSString *value = variant[@"value"];

  if(variantOptions.count > 0) {
  // Need to loop through the array until  name isEquaToString variantOptionName and when true insert value into variantOptionValuesArray in that same dict and if not exists create a new dict and insert in array
  } else {
     [variantOptionValues addObject:value];
     [variantOption setObject:name forKey:@"variantOptionName"];
     [variantOption setObject:variantOptionValues forKey:@"variantOptionValues"];
  }
  [variantOptions addObject:variantOption];
}

Solution

  • for (NSDictionary *variant in variantInfo) {
        NSString *name = variant[@"name"];
        NSString *value = variant[@"value"];
    
        BOOL found = false;
        for (NSMutableDictionary *v in variantOptions) {
            if (v[@"name"] isequalToString:name]) {
                NSMutableArray *values = v[@"variantOptionValues"];
                [values addObject:value];
                found = true;
                break;
            }
        }
    
        if (!found) {
            // name was not found
            NSMutableDictionary *variantOption = [[NSMutableDictionary alloc] init];
            NSMutableArray *variantOptionValues = [NSMutableArray alloc] init];
    
            [variantOptionValues addObject:value];
            [variantOption setObject:name forKey:@"variantOptionName"];
            [variantOption setObject:variantOptionValues forKey:@"variantOptionValues"];
            [variantOptions addObject:variantOption];
         }
    
    }