从NSArray中获取单个属性的NSArray

9

我面临一个非常常见的情况。

我有一个NSArray,其中包含自定义类型的对象,比如Person。Person类具有属性:firstName,lastName和age。

我如何从包含Person对象的NSArray中获取仅包含一个属性的NSArray?

例如:

NSArray *people;
NSArray *firstNames = [people getArrayOfAttribute:@"firstName" andType:Person.Class]

我有一个写for循环并填充firstNames数组的解决方案,但我不想这样做。


这是否类似于一个字典数组? - visakh7
为什么你不想循环数组? - jaminguy
我不想手动循环数组,只是为了节省代码行数,并以优雅的方式实现我正在处理的东西。 - Haseeb Khan
3个回答

22

使用 KVC,NSArray 可以为您处理这个问题。

NSArray *people ...;
NSArray *firstName = [people valueForKey:@"firstName"];
这将为您提供一个数组,其中包含数组中每个条目的firstName值。

1

+1:这是正确的,但除非它是一个巨大的数组,否则仅使用for循环就可以完成,而无需使用Predicates带来的麻烦。 - Jesse Naugher
1
他的问题不是关于过滤数组,而是从数组中一个键的值创建一个新的数组。 - Joshua Weinberg

1

你也可以使用基于块的枚举:

NSArray *people;  // assumably has a bunch of people
NSMutableArray *firstNames = [NSMutableArray array];

[people enumerateObjectsUsingBlock: 
 ^(id obj, NSUInteger idx, BOOL*flag){
     // filter however you want...
     [firstNames addObject:[Person firstName]];
 }];

好处在于,如果你有一群人...,它是快速和高效的。


太棒了,我忘记了KVC会这样做。谢谢你提醒我。(已投票) - Duncan C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接