我有以下多个数据列表,我想过滤掉男性的人 使用NSPredicate我该怎么做
[
"Human": {
"Person": {
"isMale": true,
"name": "PersonA",
"id": "100"
},
"isCheck": true
},
"Human": {
"Person": {
"isMale": false,
"name": "PersonB",
"id": "200"
},
"isCheck": false
},
.
.
.
.
]
数组包含字典,每个字典包含一个单词字典,我想过滤内部字典人员键。 任何帮助将不胜感激。
答案 0 :(得分:4)
Wain's answer可以正常使用。
请尝试使用根据您的问题形成的json文件的代码段。
NSString *filePath = [[NSBundle mainBundle]pathForResource:@"Humans" ofType:@"json"];
NSData *data = [[NSData alloc]initWithContentsOfFile:filePath];
NSArray *users = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"Human.Person.isMale == %@",@true];
NSArray *filteredArray = [users filteredArrayUsingPredicate:predicate];
NSLog(@"%@",filteredArray);
答案 1 :(得分:2)
在您的谓词中,您需要使用Person.isMale
,因为您需要导航到内部词典。
[NSPredicate predicateWithFormat:@"Person.isMale == %@)", [NSNumber numberWithBool:YES]];
答案 2 :(得分:1)
答案 3 :(得分:1)
试试这个
NSString *valueString = @"true"
NSPredicate *myPredicate = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
if([[[[evaluatedObject objectForKey:@"Human"] objectForKey:@"Person"] objectForKey:@"isMale"] isEqualToString:valueString])
return YES;
return NO;
}];
NSArray *filteredArray = [yourArray filteredArrayUsingPredicate:myPredicate];
答案 4 :(得分:0)
试试这个......
[NSPredicate predicateWithFormat:@"isMale == %@)", [NSNumber numberWithBool:(BOOL)true]];