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

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

之前的话是这样子的:

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.

  • %@ 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);

打印结果:

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,067评论 19 139
  • 《ijs》速成开发手册3.0 官方用户交流:iApp开发交流(1) 239547050iApp开发交流(2) 10...
    叶染柒丶阅读 5,375评论 0 7
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,785评论 18 399
  • SwiftDay011.MySwiftimport UIKitprintln("Hello Swift!")var...
    smile丽语阅读 3,867评论 0 6
  • 幸福是什么?我想大概不是有房有车亦有钱吧! 每天醒来,我感觉自己很幸福,因为我还能继续感受这世界的一切...
    林Y木木阅读 230评论 0 0