用NSPredicate过滤NSArray
我想过滤一个User
对象的数组( User
有fullname
, user_id
和一些更多的属性..)根据firstName
或lastName
开始一些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];