What's the standard convention for creating a new NSArray from an existing NSArray?
Posted
by Prairiedogg
on Stack Overflow
See other posts from Stack Overflow
or by Prairiedogg
Published on 2009-06-22T09:31:22Z
Indexed on
2010/03/29
6:33 UTC
Read the original article
Hit count: 319
Let's say I have an NSArray
of NSDictionaries
that is 10 elements long. I want to create a second NSArray
with the values for a single key on each dictionary. The best way I can figure to do this is:
NSMutableArray *nameArray = [[NSMutableArray alloc] initWithCapacity:[array count]];
for (NSDictionary *p in array) {
[nameArray addObject:[p objectForKey:@"name"]];
}
self.my_new_array = array;
[array release];
[nameArray release];
}
But in theory, I should be able to get away with not using a mutable array and using a counter in conjunction with [nameArray addObjectAtIndex:count]
, because the new list should be exactly as long as the old list. Please note that I am NOT trying to filter for a subset of the original array, but make a new array with exactly the same number of elements, just with values dredged up from the some arbitrary attribute of each element in the array.
In python one could solve this problem like this:
new_list = [p['name'] for p in old_list]
or if you were a masochist, like this:
new_list = map(lambda p: p['name'], old_list)
Having to be slightly more explicit in objective-c makes me wonder if there is an accepted common way of handling these situations.
© Stack Overflow or respective owner