假设我有一个
NSArray
属于
NSDictionaries
这是10个元素的长度。我想再创造一秒钟
不可变数组
每个字典上的单个键的值。我能想到的最好的方法是:
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中必须稍微明确一点,这让我怀疑是否有一种公认的处理这些情况的通用方法。