【发布时间】:2010-11-04 19:20:36
【问题描述】:
假设我有一个 NSDictionaries 中的 NSArray,它有 10 个元素长。我想用每个字典上单个键的值创建第二个NSArray。我能想到的最好方法是:
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];
}
但从理论上讲,我应该能够不使用可变数组并使用与[nameArray addObjectAtIndex:count] 结合使用的计数器,因为新列表应该与旧列表一样长。请注意,我不是要过滤原始数组的子集,而是创建一个具有完全相同数量元素的新数组,只是从数组中每个元素的某个任意属性中挖掘出的值。
在python中可以这样解决这个问题:
new_list = [p['name'] for p in old_list]
或者如果你是一个受虐狂,像这样:
new_list = map(lambda p: p['name'], old_list)
在 Objective-c 中必须稍微更明确一点,这让我想知道是否有一种公认的通用方法来处理这些情况。
【问题讨论】:
标签: ios objective-c xcode cocoa cocoa-touch