2012-02-07 9 views
0

私はPersonオブジェクトを含むNSArrayを持っています。iOS - 配列内の2つの配列とオブジェクトの比較 - ロジック問題

このpersonオブジェクトには、次のものが含まれます。

> Name 
> Age 
> School 
> Address 
> Telephone_Number 

後、私は[email protected]"Jemmy";のように、この人物オブジェクトに値を設定することになります上の(しかし、私は他の属性、年齢を設定することはありません、学校など)。

私はpersonArrayと呼ばれるNSArrayを持っていて、その中に1000人のオブジェクトレコードが含まれています。今私はNameJemmyを含むすべてのオブジェクトをフィルタリングする必要があります。これどうやってするの ?

私がやっていることは考えています。

NSMutableArray *arrayThatContainAllPersonObjects = [NSMutableArray arrayWithArray:personArray]; 
[arrayThatContainAllPersonObjects removeObjectsInArray:arrayWeAddedTheName]; 

しかし、私が得るのは、私のフィルタ結果を持たない配列です。とにかく、これは正しいアプローチではないかもしれません。これを解決するにはNSSetsUNIONSを使用することができます。

注:これは重複した質問だと言われるかもしれませんが、私はこれを多く探しています。

答えて

4

NSArrayのfilteredArrayUsingPredicateでNSPredicateを使用します。このような何か:

NSArray *filteredArray = [personArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"name = \"Jemmy\""]]; 
+0

名前、年齢、学校はPersonオブジェクトのオブジェクトです。配列の一部であるオブジェクトの属性を比較できますか? – shajem

+0

はい。詳細は、Predicate Programming Guide(https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Predicates/predicates.html#//apple_ref/doc/uid/TP40001789)を参照してください。 'filteredArrayUsingPredicate'は' NSPredicate'を配列の各メンバーに適用し、述部と一致する要素のみを持つ配列を返します。 person.name = @ "Jemmy"の場合、私が与えたNSPredicateはPerson *と一致します。 – yuji

1

NSArray'sfilteredArrayUsingPredicate:関数を試してみて、カスタムpredicateと書いて、配列内のオブジェクトを評価してください。

+0

配列( 'arrayThatContainAllPersonObjects')の一部であるオブジェクト( 'person')の属性(' name')を比較できますか? – shajem

+0

はい、事実上すべてのパラメータを評価できます。私がリンクしているドキュメントを読んで、その方法を学びます。 – Alexander

3

Jemmyの全て同一であれば簡単なオプションが

NSArray * cleanArray = [arrayWithAll removeObjectIdenticalTo:jemmyPerson]; 

あるが一致しない場合は(それらがJemmyと呼ばれている - しかし、別の学校を持っているか、何でも)あなたがダウンしていますブロック/イテレーションを使用して同様のものにすることができる。

NSPredicate jemmyPredicate = [NSPredicate predicateWithFormat:@"name == \"jemmy\"]; 

または

NSPredicate jemmyPredicate = [NSPredicate predicateWithBlock:^(id evaluatedObject, NSDictionary *bindings){ 
      return [evaluatedObject.Name isEqual:@"Jemmy"]; 
    }]; 

詳細は、述語のページを参照してください:述語のようなもので構成することができます。

+0

ブロック内に追加する目的は何ですか? – shajem

+0

これは、より複雑なロジックを簡単に書くことができますが、単純な場合でも述語に固執します。 –

関連する問題