iphone - 使用 NSPredicate 过滤 NSArray

标签 iphone objective-c ios nsarray nspredicate

我想过滤一组 User 对象(Userfullnameuser_id 和其他一些属性..) 根据以某个字符串开头的 firstNamelastName
我知道如何根据一个条件进行过滤:

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

这将给我所有名字以“word”开头的用户。
但是,如果我想要所有 firstName 或 lastName 以“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];

两者都行。

关于iphone - 使用 NSPredicate 过滤 NSArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12817340/

相关文章:

ios - iBeacon 监控具有相同 UUID 和不同主要、次要的多个信标

ios Objective C 委托(delegate)方法

ios - 为 GoogleMap objective-c 调用 API

ios - 如何在不卡住 ARSession 的情况下将 ARSCNView 放入 Tabview Controller 中?

objective-c - 更改 UICollectionViewLayout 时检测隐式动画的结束

iphone - 如何在 iPhone 应用程序中垂直居中显示 UITextField 中的文本

iphone - 如何编写一个可以带参数的宏?

objective-c - block 捕获对象的过度释放问题;保留计数从 +2 直接跳到 0!

iphone - 在 Instruments 中分析 iPhone 应用程序时缺少符号名称

ios - 台风:组装和 Storyboard创建的 ViewControllers