【OC学习-33】谓词介绍和小案例,其实相当于一个筛选过滤器的作用

谓词,呃,其实是一个NSPredicate对象,你可以设置一些条件给这个对象,那么这个对象就相当于一个过滤器了,满足它条件的和不满足的如何如何,是一个过滤作用。

(1)创建一个对象,有name和age两个实例变量,然后利用for语句创建10个对象到一个数组中,最后创建一个谓词,过滤一下,把年龄小于25的那个对象的名字输出。

//Person.h
#import <Foundation/Foundation.h>

@interface Person : NSObject
@property(nonatomic,copy)NSString *name;
@property(nonatomic,retain)NSNumber *age;
@end
//main.m文件
#import <Foundation/Foundation.h>
#import "Person.h"

int main(int argc, const char * argv[])
{
    @autoreleasepool {
        //定义一个数组,并利用for语句往里面添加10个元素
        NSMutableArray *mutarr1=[NSMutableArray arrayWithCapacity:10];
        for (int i=0; i<10; i++) {
            Person *person=[[Person alloc]init];
            [email protected](20+i);
            if (i<5) {
                person.name=[NSString stringWithFormat:@"jack_%d",i];
            }else{
                person.name=[NSString stringWithFormat:@"tom_%d",i];
            }
            [mutarr1 addObject:person];
        }
        //创建一个谓词,也就是过滤条件,直观可见这个条件就是年龄小于25
        NSPredicate *predic1=[NSPredicate predicateWithFormat:@"age<25"];
        //利用循环这个数组,输出符合条件的对象的name
        for (Person *p in mutarr1) {
            if ([predic1 evaluateWithObject:p]) {
                NSLog(@"%@",p.name);
            }
        }
    }
    return 0;
}

结果就是过滤出来的:

jack_0
jack_1
jack_2
jack_3
jack_4

(2)也可以利用谓词先过滤一下这个数组,然后再输出:

NSArray *arr2=[mutarr1 filteredArrayUsingPredicate:predic1];
        NSLog(@"%@",arr2);

当然,这样做之前,需要先定义对象的打印方法,在Person.m文件中:

#import "Person.h"

@implementation Person
-(NSString *)description{
    NSString *s=[NSString stringWithFormat:@"%@,%@",_name,_age];
    return s;
}
@end

(3)也可以使用占位符,以下的几条主要是针对条件里面的书写的

NSPredicate *predic1=[NSPredicate predicateWithFormat:@"age<%d",25];

(4)也可以使用and和or(&&和||)都可以

NSPredicate *predic1=[NSPredicate predicateWithFormat:@"age<%d && age>21",25];

(5)用in。in后面也可以跟一个数组,也就是要再数组里面。

NSPredicate *predic1=[NSPredicate predicateWithFormat:@"name in {'jack_0','jack_1'}"];

(6)还可以用BEGINSWITH和ENDSWITH来匹配,大小写敏感

NSPredicate *predic1=[NSPredicate predicateWithFormat:@"name BEGINSWITH'j' || ENDSWITH '1'"];

(7)CONTAINS和LIKE包含查询

NSPredicate *predic1=[NSPredicate predicateWithFormat:@"name CONTAINS 'a' "];
NSPredicate *predic1=[NSPredicate predicateWithFormat:@"name LIKE '*a*' "];
时间: 2024-10-08 11:48:52

【OC学习-33】谓词介绍和小案例,其实相当于一个筛选过滤器的作用的相关文章

Eclipse使用JDBC小案例

JDBC(Java Database Connectivity:Java访问数据库的解决方案)定义一套标准接口,即访问数据库的通用API,不同数据库厂商根据各自数据的特点去实现这些接口. 第1部分 JDBC工作过程: 1)加载驱动,建立连接: 2) 创建语句对象: 3) 执行SQL语句: 4) 处理结果集: 5) 关闭连接: 第2部分 JDBC具体使用步骤: 1) 导入JDBC驱动jar: 2) 注册JDBC驱动: 参数:“驱动程序类名” Class.forName(“驱动程序类名”); 3)

ios学习笔记图片+图片解释(c语言 oc语言 ios控件 ios小项目 ios小功能 swift都有而且笔记完整喔)

下面是目录其中ios文件夹包括了大部分ios控件的介绍和演示,swift的时完整版,可以学习完swift(这个看的是swift刚出来一周的视频截图,可能有点赶,但是完整),c语言和oc语言的也可以完整的学习完所需知识,,其他文件夹的内容如其名说描述一样 没张图片都有文字说明,可以需要该功能的时候搜索一下然后打开图片就可以学习到 网盘下载地址:需要的话给留言我再传上去 http://www.cnblogs.com/langtianya原创 ios学习笔记图片+图片解释(c语言 oc语言 ios控件

(转载)OC学习篇之---谓词(NSPredicate)

在前一篇文章中我们介绍了OC中一个重要技术通知,今天我们在来看一下OC中给我们提供的一个技术:谓词(NSPredicate) OC中的谓词操作是针对于数组类型的,他就好比数据库中的查询操作,数据源就是数组,这样的好处是我们不需要编写很多代码就可以去操作数组,同时也起到过滤的作用,我们可以编写简单的谓词语句,就可以从数组中过滤出我们想要的数据.非常方便.在Java中是没有这种技术的,但是有开源的框架已经实现了此功能. 下面来看一下具体的例子吧: Person.h 1 // 2 // Person.

Python学习第四天学习写的小案例(主要是针对 分支/循环的学习)

Python学习第四天学习写的小案例 (2019/07/17) 第一题:使用while循环输出1 2 3 4 5 6 8 9 10 程序代码: s = 0 while s<10: if s==6: s += 1 # 当数字为7的时候输出一个空格出来 print(end=' ') continue s += 1 print(s,end=' ') 运行结果: 1 2 3 4 5 6 8 9 10 第二题: 求1-100的所有数的和 程序代码: count = 0 for i in range(101

OC学习篇之---谓词(NSPredicate)

在前一篇文章中我们介绍了OC中一个重要技术通知:http://blog.csdn.net/jiangwei0910410003/article/details/41923401,今天我们在来看一下OC中给我们提供的一个技术:谓词(NSPredicate) OC中的谓词操作是针对于数组类型的,他就好比数据库中的查询操作,数据源就是数组,这样的好处是我们不需要编写很多代码就可以去操作数组,同时也起到过滤的作用,我们可以编写简单的谓词语句,就可以从数组中过滤出我们想要的数据.非常方便.在Java中是没

javascript入门视频第一天 小案例制作 零基础开始学习javascript

JavaScript 是我们网页设计师必备的技能之一.我们主要用javascript来写的是网页特效.我们从零基础开始学习javascript入门. 但是,好的同学刚开始不知道怎么学习,接触js,因此,小强老师给大家写了这篇入门的javascript文章.从零基础开始学习js,使大家入门更简单,希望大家喜欢.JavaScript是一种脚本语言. 也是我们web网络中最为流行一种脚本语言.脚本语言:     1.不是独立存在的.需要依附.js就是依附在浏览器中.     2.脚本语言也是语言,也有

ROS与Arduino学习(七)小案例节点通信

ROS与Arduino学习(七)小案例节点通信 Tutorial Level:Logging日志 Next Tutorial: 原文地址:https://www.cnblogs.com/flyingjun/p/8952857.html

[jQuery学习系列六]6-jQuery实际操作小案例

前言最后在这里po上jQuery的几个小案例. Jquery例子1_占位符使用需求: 点击第一个按钮后 自动去check 后面是否有按钮没有选中, 如有则提示错误消息. <html> <head> <script type="text/javascript"> function check() { String.prototype.format = function(){ var args = arguments; return this.repla

OC学习篇之---总结和学习目录

今天终于把OC的基础知识学习完了,但是这些知识只是最基础的,还有很多高级知识,这个可能需要后面慢慢的去学习才能体会到.下面就是这次学习OC的目录教程,如果大家发现有什么不正确的地方,请指正,小弟是新生,多请OC老鸟来喷~~ 1.OC学习篇之---概述 2.OC学习篇之---第一个程序HelloWorld 3.OC学习篇之---类的定义 4.OC学习篇之---类的初始化方法和点语法的使用 5.OC学习篇之---类的三大特性(封装,继承,多态) 6.OC学习篇之[email protected]关键