2012-03-27 12 views
31

これは基本的な質問かもしれませんが、答えが見つからないようです。forループのない別の配列の各オブジェクトのプロパティ値の配列を取得します。

特定のタイプ(車)のオブジェクトを持つNSArray(carArray)があるとします。

forループを使用してcarArrayを反復せずに、これらのオブジェクトのプロパティ(カラー)のすべての値を含むNSArray(colorArray)を取得できますか? (.NETのLINQを参照)

NSMutableArray *colorList = [[NSMutableArray alloc] initWithCapacity:0]; 

for (Car *car in carArray) 
{ 
    [colorList addObject:car.color]; 
} 

ありがとうございます。

答えて

72

はい。あなたのオブジェクトがKVC/KVO protocolを採用していると仮定します。あなたが好きなプロパティの配列を取得することができますvalueForKey:メソッドが何をするか実際に

NSArray *colorList = [carArray valueForKey:@"color"]; 

を、配列の各オブジェクトにキーを使用してvalueForKey:を起動した結果を含む配列を返すことです。

+0

私はこの方法をドキュメントで見ていましたが、正確には何かが分かりませんでした。私はもちろん、それを試してみることができます。 –

+0

誤ったキーを使用すると、実行時にクラッシュすることに注意してください。この方法には型の安全性がないため、間違ったキーを使用するようコンパイラーに警告されることはありません。 – damirstuhec

-1

(NSArrayの上のAppleのドキュメントから)あなたは色を取得するためにNSSetを使用することができます。

NSSet *NScolors = [NSSet setWithArray:[carArray valueForKey:@"color"]]; 
NSArray *colors = [NScolors allObjects]; 
14

はい。あなたはそれを反復せずに行うことができます。

NSArray *colorArray = [carArray valueForKeyPath:@"@distinctUnionOfObjects.color"]; 
関連する問題