如何根据 nsarray 过滤谓词

Posted

技术标签:

【中文标题】如何根据 nsarray 过滤谓词【英文标题】:How to filter a predicate based on nsarray 【发布时间】:2014-07-18 02:55:40 【问题描述】:

我有以下 uisearchbar 委托方法。我希望此方法搜索我的 objects arrayofterms 属性,以查看是否有任何元素与 searchText 参数匹配。

这行得通吗? :

-(void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope 


    [self.filteredArray removeAllObjects];
    // something like this is what the objects array attribute will look like: NSArray *arrayofterms = [NSArray arrayWithObjects:@"Miguel", @"Ben", @"Adam", @"Melissa", nil];

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.arrayofterms contains[c] %@",searchText];
    self.filteredArray = [NSMutableArray arrayWithArray:[self.planDataArray filteredArrayUsingPredicate:predicate]];

    

【问题讨论】:

是否有效?你告诉我们。 不,它不会,因为它正在将文本字符串与数组进行比较。我希望它与数组的内容进行比较。 使用您的谓词,实现以下功能:检查self.planaDataArray 的每个元素的arrayofterms 属性是否包含searchText。很遗憾,我没有得到您想要实现的目标,请您澄清一下吗? 【参考方案1】:

数组是否包含字符串?那么……

NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(NSString *string, NSDictionary *bind) 
    return [string isEqualToString:searchText];
];

self.filteredArray = [[self.planDataArray filteredArrayUsingPredicate:predicate] mutableCopy];

如果 planDataArray 包含其他类型的对象,可能是自定义对象,那么 ...

NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(MyCustomObject *object, NSDictionary *bind) 
    NSString *string = object.someStringProperty;
    return [string isEqualToString:searchText];
];

【讨论】:

以上是关于如何根据 nsarray 过滤谓词的主要内容,如果未能解决你的问题,请参考以下文章

NSPredicate的使用

使用 NSpredicate 过滤 NSArray 的 Big-O 运行时

NSPredicate 针对 NSArray 中的嵌套值

使用 NSPredicate 根据 NSDictionary 键过滤 NSArray

为啥 NS 谓词无法解析我对 NSArray 索引的条件语句

如何使用两个 NSPredcates 过滤 NSArray