使用NSPredicate和正则表达式过滤JSON stings数组

时间:2016-04-05 09:17:21

标签: objective-c json nspredicate nsregularexpression

我的def loadSet(path='/data/file.txt'): datset={} for line in open(path+'/file.txt'): (userid,wordid)=line.split('\t') dataset.setdefault(user,{}) dataset[userid][wordid]=float(wordid) return dataset 包含NSArray字符串,如下所示。

JSON

我想在“title”键下找到具有“plet”值的对象的索引。当我只是在[ { "title":"find good book", "isCompleted":true }, { "title":"complete work", "isCompleted":false }, { "title":"check schedule", "isCompleted":false } ] 下方使用它时,它返回了每个对象,因为每个NSPredicate个对象都有“isCompleted”作为键蜇。

JSON

我不想将NSPredicate* predicate = [NSPredicate predicateWithFormat:@"self CONTAINS[cd] %@", @"plet"]; 转换为JSON个对象。我不使用NSDictionary,因为我要将此谓词应用于[NSPredicate predicateWithBlock:]。根据文档,由NSFetchedResultsController创建的NSPredicate不能用于NSFetchedResultsController。

所以我的问题是,我可以使用正则表达式来解决这个问题吗?我对正则表达不太了解。有人可以举个例子吗?

1 个答案:

答案 0 :(得分:0)

您可以使用predicateWithBlock方法创建谓词。在块内,检查dynamicVale是否包含要搜索的值。

代码:

NSArray *yourArray = ....;
NSString *searchText = ...;

NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(NSDictionary   * _Nonnull evaluatedObject, NSDictionary<NSString *,id> * _Nullable bindings) {
    NSArray *dynamicVales = [evaluatedObject valueForKeyPath: @"dynamicVales.value"];
    return [dynamicVales containsObject:searchText];

}];

NSArray *filteredArray = [yourArray filteredArrayUsingPredicate:predicate];

从JhonyKutties答复。享受编码:)