0

NSArrayオブジェクトを含む がありますPerson

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

> Name 
> Age 
> School 
> Address 
> Telephone_Number

後で、この人物オブジェクトに値を設定しますperson.Name=@"Jemmy";(ただし、他の属性、年齢、学校などは設定しません)。

NSArray呼ばれるpersonArrayがあり、1000 個の person オブジェクト レコードが含まれています。次に、を含むすべてのオブジェクトを除外する必要がありますName Jemmy。これどうやってするの ?

私がやろうと思っていたのは;

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

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

注:これは重複した質問だと言う人もいるかもしれませんが、私はこれについて多くのことを検索しました。

4

3 に答える 3

4

NSArray の で NSPredicate を使用したいfilteredArrayUsingPredicate。このようなもの:

NSArray *filteredArray = [personArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"name = \"Jemmy\""]];
于 2012-02-07T15:09:40.007 に答える
3

ジェミーがすべて同一である場合、簡単なオプションは

  NSArray * cleanArray = [arrayWithAll removeObjectIdenticalTo:jemmyPerson];

そうでない場合(ジェミーと呼ばれていますが、学校が違うなど)、あなたはダウンしています

   NSArray * cleanArray = [arrayWithAll filterUsingPredicate:jemmyPredicate];

またはブロック/反復と同様。述語は、次のようなもので構築できます。

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

また

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

詳細については、述語ページを参照してください。

于 2012-02-07T15:15:32.340 に答える
1

関数を使用して、配列内のオブジェクトを評価NSArray's filteredArrayUsingPredicate:するカスタム述語を作成してみてください。

于 2012-02-07T15:09:30.340 に答える