如何根据 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 过滤 NSArray 的 Big-O 运行时
使用 NSPredicate 根据 NSDictionary 键过滤 NSArray