Iphone 使用NSPredicate筛选NSArray
我想根据以某个字符串开头的Iphone 使用NSPredicate筛选NSArray,iphone,objective-c,ios,nsarray,nspredicate,Iphone,Objective C,Ios,Nsarray,Nspredicate,我想根据以某个字符串开头的firstName或lastName筛选User对象数组(User具有fullname、User\u id和其他一些属性..)。 我知道如何根据一个条件进行过滤: NSPredicate* predicate = [NSPredicate predicateWithFormat:@"firstName BEGINSWITH[cd] %@", word]; NSArray* resArr = [myArray filteredArrayUsingPredicate:pre
firstName
或lastName
筛选User
对象数组(User
具有fullname
、User\u id
和其他一些属性..)。我知道如何根据一个条件进行过滤:
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"firstName BEGINSWITH[cd] %@", word];
NSArray* resArr = [myArray filteredArrayUsingPredicate:predicate];
这将为我提供所有名字以“word”开头的用户。但是,如果我希望所有的用户的名字或姓氏都以“word”开头,那该怎么办呢?您可以使用类
NSCompoundPredicate
来创建复合谓词
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];
由于某种原因,使用复合谓词对我不起作用。但单独使用次级信用卡是可行的。知道会发生什么吗。