我有一个NSArray,比如Article对象。 Article对象包含另一个NSArray标签。
所以我想找到包含一组标签的文章,如[iphone,apple,music]。
在SQL中它就像:WHERE tags IN ('iphone', 'apple', 'music')
。
到目前为止,我只找到了如何使用NSPredicate通过单个值查找元素:
NSArray *filteredItems = [article filteredArrayUsingPredicate:
[NSPredicate predicateWithFormat:@"tag == %@", @"iphone"]];
有办法做我需要的吗?
答案 0 :(得分:2)
您可以使用ANY和IN子句
NSArray *tags = ...;
[NSPredicate predicateWithFormat:@"ANY tags.name IN %@",tags]
答案 1 :(得分:1)
您可以使用NSCompoundPredicate
将各种NSPredicate
对象合并在一起,如下所示:
NSMutableArray *predicates = [NSMutableArray array];
[predicates addObject:[NSPredicate predicateWithFormat:@"tag == %@", @"iphone"]]];
[predicates addObject:[NSPredicate predicateWithFormat:@"tag == %@", @"apple"]]];
[predicates addObject:[NSPredicate predicateWithFormat:@"tag == %@", @"music"]]];
//Create a predicate using AND
NSPredicate *compoundANDpred = [NSCompoundPredicate andPredicateWithSubpredicates:predicates];
//Create a predicate using OR
NSPredicate *compoundORpred = [NSCompoundPredicate orPredicateWithSubpredicates:predicates];
或者您可以使用带有ANY和IN的谓词,如其他一些答案中所述。
答案 2 :(得分:0)
您可以使用下面的谓词
NSPredicate *template = [NSPredicate predicateWithFormat:@"tag == %@ OR tag == %@ OR tag == %@",@"iphone",@"apple",@"music"];
答案 3 :(得分:0)
这也可以这样做
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"tag == %@", @[@"iphone", @"apple", @"music"]];
NSArray *result = [dataArray filterUsingPredicate:predicate];