使用NSPredicate对数组里面的字典元素进行过滤

2016-11-18  本文已影响3576人  kikido

最近在做项目的时候需要对数组里面的元素进行筛选,把符合条件的字典筛选出来.

之前的话是这样子的:

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);

打印的结果是

屏幕快照 2016-11-18 19.15.27.png

所以如果知道要筛选的字段的话,还是很好实现的,但是这次的项目里面需要筛选的字段并不能确定,所以只能用一个变量去代替,我当时是这么做的


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.

反正就是需要使用%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);

打印结果:

屏幕快照 2016-11-18 19.29.34.png

ok,完美~还是要提醒一下,需要使用大写的K(%K),来当变量的占位符哈!

上一篇下一篇

猜你喜欢

热点阅读