用NSPredicate过滤NSArray

我想过滤一个User对象的数组( Userfullnameuser_id和一些更多的属性..)根据firstNamelastName开始一些string。
我知道如何根据一个条件过滤:

 NSPredicate* predicate = [NSPredicate predicateWithFormat:@"firstName BEGINSWITH[cd] %@", word]; NSArray* resArr = [myArray filteredArrayUsingPredicate:predicate]; 

这将给我所有的用户,有一个firstName以“单词”开头。
但是如果我想让所有具有以“word”开头的firstName或lastName的用户呢?

您可以使用类NSCompoundPredicate来创build复合谓词。

 NSPredicate *firstNamePred = [NSPredicate predicateWithFormat:@"firstName BEGINSWITH[cd] %@", word]; NSPredicate *lastNamePred = [NSPredicate predicateWithFormat:@"lastName BEGINSWITH[cd] %@", word]; NSArray *predicates = @[firstNamePred, lastNamePred]; NSPredicate *compoundPredicate = [NSCompoundPredicate orPredicateWithSubpredicates:predicates]; NSArray* resArr = [myArray filteredArrayUsingPredicate:compoundPredicate]; 

这是我喜欢做的一种方式。

或者你可以做…

 NSPredicate* predicate = [NSPredicate predicateWithFormat:@"firstName BEGINSWITH[cd] %@ OR lastName BEGINSWITH[cd] %@", word, word]; NSArray* resArr = [myArray filteredArrayUsingPredicate:predicate]; 

要么会工作。

像这样使用:

 NSPredicate* predicate = [NSPredicate predicateWithFormat:@"firstName BEGINSWITH %@ OR lastName BEGINSWITH %@", word, word]; NSArray* resArr = [myArray filteredArrayUsingPredicate:predicate];