4

How would I create a number of NSDictionary variables using an array's count?

This is basically what I came up with, but I'm not sure how to make this work with Objective-C syntax. doesntContainAnother is an NSArray. I want the names of the dictionaries to use the current value of loopInt.

int *loopInt = 0;
while (doesntContainAnother.count <= loopInt) {

    NSMutableDictionary *[NSString stringWithFormat:@"loopDictionary%i", loopInt] = [[[NSMutableDictionary alloc] init] autorelease];
    [NSString stringWithFormat:@"loopDictionary%i", loopInt] = [NSDictionary dictionaryWithObject:[array1 objectAtIndex:loopInt] 
                                                 forKey:[array2 objectAtIndex:loopInt]];
    loopInt = loopInt + 1;
}
1
  • Can you clarify what you want? You want to create an array of dictionaries that each contain only one value? Commented Feb 9, 2010 at 19:43

2 Answers 2

4

Create a mutable array and loop until you reach the original array's count, creating a dictionary and adding it to the mutable array on each iteration.

Your code should look like this.

NSMutableArray *dictionaries = [[NSMutableArray alloc] init];
for (int i = 0; i < doesntContainAnother.count; i++) {
    [dictionaries addObject:[NSMutableDictionary dictionaryWithObject:[array1 objectAtIndex:i] forKey:[array2 objectAtIndex:i]]];
}

The approach of creating variables with numbers at the end of their names is an antipattern and not even possible in Objective-C. It's equivalent to an array, but clunkier.

Sign up to request clarification or add additional context in comments.

2 Comments

Yeah, that makes sense. I updated my question with code I came up with. I just don't know how to set the object as a variable name. :/
That is exactly what I was trying to do. I had it in my head but I'm still too new to objective-c, and to be honest I don't think I've ever done that in C++.
2

You need to create a mutable array, and then put the objects into the array. You can't create a variable with the same name as the contents of a string, as you have done. For example:

NSMutableArray *arr = [[NSMutableArray alloc] initWithCapacity:[doesntContainAnother count]];
int i = 0;    // Note: type is int, not int*
for (i = 0; i < [doesntCountainAnother count]; i++) {
    [arr addObject:[NSMutableDictionary dictionary]];
}

// Later...
NSMutableDictionary *d1 = [arr objectAtIndex:3];

Or if you want to pull them out of the list by name:

NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithCapacity:[doesntCountainAnother count]];
int i = 0;
for (i = 0; i < [doesntContainAnother count]; i++) {
    [dict setObject:[NSMutableDictionary dictionary] forKey:[NSString stringWithFormat:@"loopDictionary%d", i]];
}

// Later...
NSMutableDictionary *d1 = [dict objectForKey:@"loopDictionary3"];

But the first way is likely the easiest.

1 Comment

Thank you for explaining this. I understand this much better now :)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.