9

私は非常に定期的なシナリオに直面しています。

私は、Personなどのカスタムタイプのオブジェクトを持つNSArrayを持っています。Personクラスには、firstName、lastName、およびageという属性があります。

Personオブジェクトを持つNSArrayから1つの属性のみを含む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 に答える