9

我正面临一个非常常规的情况。

我有一个 NSArray,它有一个自定义类型的对象,比如 Person。Person 类具有以下属性:firstName、lastName 和 age。

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

就像是:

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

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

4

3 回答 3

22

NSArray 将使用 KVC 为您处理此问题

NSArray *people ...;
NSArray *firstName = [people valueForKey:@"firstName"];

这将为您提供数组中每个条目的 firstName 值的数组

于 2011-05-11T18:25:15.813 回答
1

查看 NSMutableArray 中的 filterUsingPredicate: 方法,基本上您创建了一个 NSPredicate 对象,该对象将定义如何过滤数组。

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Predicates/Articles/pUsing.html#//apple_ref/doc/uid/TP40001794-CJBDBHCB

本指南将为您提供概述,并包含处理数组的部分。

于 2011-05-11T18:22:30.027 回答
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]];
 }];

好处是如果你有一群人,它又快又高效……

于 2011-05-11T21:10:38.687 回答