0

我有一个NSArray包含Person对象。

这个人对象包含以下内容;

> Name 
> Age 
> School 
> Address 
> Telephone_Number

稍后我将为这个人对象设置值,例如person.Name=@"Jemmy";(但我不会设置其他属性,年龄,学校等)。

我有一个NSArray被调用的personArray,其中包含 1000 个人员对象记录。现在我需要过滤掉所有包含Name Jemmy. 我怎样才能做到这一点 ?

我想做的是;

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

但是,我会得到一个没有我的过滤结果的数组。无论如何,这可能不是正确的方法。我相信我们可以使用NSSets,UNIONS来解决这个问题。

注意:有人可能会说这是一个重复的问题,但我对此进行了很多搜索。

4

3 回答 3

4

您想将 NSPredicate 与 NSArray 一起使用filteredArrayUsingPredicate。像这样的东西:

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

如果杰米都是一样的,那么简单的选择是

  NSArray * cleanArray = [arrayWithAll removeObjectIdenticalTo:jemmyPerson];

如果不是这种情况(他们被称为 Jemmy - 但有不同的学校或其他什么),你就可以

   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 回答