最近在做项目的时候需要对数组里面的元素进行筛选,把符合条件的字典筛选出来.
之前的话是这样子的:
NSArray *array = @[@{@"name" : @"zhangsan", @"age" : @"10"},
@{@"name" : @"lisi",@"age" : @"11"},
@{@"name" : @"wangwu",@"age" : @"12"}];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name CONTAINS[c] 'zhang'"];
NSArray *results = [array filteredArrayUsingPredicate:predicate];
NSLog(@"筛选的结果是 == %@",results);
打印的结果是
所以如果知道要筛选的字段的话,还是很好实现的,但是这次的项目里面需要筛选的字段并不能确定,所以只能用一个变量去代替,我当时是这么做的
NSString *preStr = @"zhang";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%@ CONTAINS[c] 'zhang'",preStr];
这样子操作的话是不能筛选出结果来的,所以查了下文档,
The format string supports printf-style format specifiers such as %x (see Formatting String Objects). Two important format specifiers are %@ and %K.
- %@ is a var arg substitution for an object value—often a string, number, or date.
- %K is a var arg substitution for a key path.
反正就是需要使用%K(大写的K)这个占位符来代替变量,下面是替换过得代码:
NSArray *array = @[@{@"name" : @"zhangsan", @"age" : @"10"},
@{@"name" : @"lisi",@"age" : @"11"},
@{@"name" : @"wangwu",@"age" : @"12"}];
NSString *preStr = @"name";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K CONTAINS[c] 'n'",preStr];
NSArray *results = [array filteredArrayUsingPredicate:predicate];
NSLog(@"筛选的结果是 == %@",results);
打印结果:
ok,完美~还是要提醒一下,需要使用大写的K(%K),来当变量的占位符哈!