NSPredicate 的使用

NSPredicate是什么?

NSPredicate 是预测的意思 但是我们常翻译成谓词

它可以干什么?

使用NSPredicate可以定义模糊查询条件 根据一定的条件 我们就可以从一个数组中快速找出 符合一定条件的元素对象

本次的示范我们沿用上次讲的 NSSortDescriptor 的使用 里面的代码 我们只需要稍微的修改一下 导航栏右边的按钮 为‘搜索年龄大于20的对象’ 然后再把点击左上角按钮的业务代码修改为如下:

- (IBAction)sortAge:(id)sender {

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age>20"]; //创建NSPredicate对象 并定义查询条件

    self.datas =   [[self.datas filteredArrayUsingPredicate:predicate] mutableCopy]; //使用数组的filteredArrayUsingPredicate方法 获取符合我们指定条件的对象
   [self.tableView reloadData]; 

}

这个时候我们点击左上角的按钮 就可以查询出数组里面 年龄大于20的对象

除了 > 号之外 我们还可以用IN 查询两个数组的交集

我们新建一个程序 来测试IN 的用法  我们在ViewDidload方法里面 写入如下代码:

- (void)viewDidLoad {
    [super viewDidLoad];

    NSArray *array1 = [NSArray arrayWithObjects:@1,@2,@3,@4,@5,@6,@7,@8, nil];
    NSArray *array2 = [NSArray arrayWithObjects:@4,@6, nil];

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF in%@",array2]; //SELF 代表本身 IN可以大写也可以小写
    NSArray *temp = [array1 filteredArrayUsingPredicate:predicate]; //表示获取 array2 和 array1中的交集
NSLog(@"temp ====\n%@",temp); }

运行 打印结果为:

temp ====

(

4,

6

)

可以看到这两个数组的交集就是4和6 因为这两个数组中 都有4和6 这个元素

同时除了IN 之外 BETWEEN可以获取一定范围的值 示例代码如下:

- (void)viewDidLoad {
    [super viewDidLoad];

NSArray *array1 = [NSArray arrayWithObjects:@100,@20,@3,@4,@4,@6,@7,@1, nil];

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF BETWEEN{1,20}"];
    NSArray *temp = [array1 filteredArrayUsingPredicate:predicate];

    NSLog(@"temp ====\n%@",temp);

}

上面的代码表示找出 值在1到20范围类的值包括首尾

打印结果如下:

temp ====

(

20,

3,

4,

4,

6,

7,

1

)

当然除了上面介绍的两个用法之外 还有其他的比较运算符>,<,==,>=,<=,!=

这里以等于号==为例:

- (void)viewDidLoad {
    [super viewDidLoad];

    NSArray *array1 = [NSArray arrayWithObjects:@100,@20,@3,@4,@4,@6,@7,@1, nil];

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF ==6"];

    NSArray *temp = [array1 filteredArrayUsingPredicate:predicate];

    NSLog(@"temp ====\n%@",temp);

}

打印结果如下:

temp ====

(

6

)

同时还有以下与字符串操作相关的关键词 :

BEGINSWITH  :以某个字符串开头

ENDSWITH     :以某个字符串结尾

CONTAINS      :是否包含某个字符串

同时这三个关键词后面还可以跟上一些格式符号 如:BEGINSWITH[cd] c表示不区分大小写 d表示不区分发音符号 cd就可以表示即不区分大小写 也不区分发音符号

- (void)viewDidLoad {
    [super viewDidLoad];

    NSArray *array1 = [NSArray arrayWithObjects:@"jack",@"anne",@"reserved",@"control" ,@"type",@"soure",@"version",nil];

    //查询出包含e这个字符的字符串
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF CONTAINS[cd] ‘E‘ "];

    NSArray *temp = [array1 filteredArrayUsingPredicate:predicate];

    NSLog(@"temp ====\n%@",temp);

}

打印结果如下:

temp ====

(

anne,

reserved,

type,

soure,

version

)

 

- (void)viewDidLoad {
    [super viewDidLoad];

    NSArray *array1 = [NSArray arrayWithObjects:@"jack",@"anne",@"reserved",@"control" ,@"type",@"soure",@"version",nil];

    //查询出以a这个字符开头的字符串
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF BEGINSWITH[cd] ‘a‘ "];

    NSArray *temp = [array1 filteredArrayUsingPredicate:predicate];

    NSLog(@"temp ====\n%@",temp);

}

打印结果如下:

temp ====

(

anne

)

- (void)viewDidLoad {
    [super viewDidLoad];

    NSArray *array1 = [NSArray arrayWithObjects:@"jack",@"anne",@"reserved",@"control" ,@"type",@"soure",@"version",nil];

    //查询出以e这个字符结尾的字符串
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF ENDSWITH[cd] ‘e‘ "];

    NSArray *temp = [array1 filteredArrayUsingPredicate:predicate];

    NSLog(@"temp ====\n%@",temp);

}

打印结果如下:

temp ====

(

anne,

type,

soure

)

还有一个你可能会用到的关键字 LIKE  他后面也可以写[cd]格式符号

- (void)viewDidLoad {
    [super viewDidLoad];

    NSArray *array1 = [NSArray arrayWithObjects:@"jack",@"anne",@"reserved",@"control" ,@"type",@"soure",@"version",nil];

    //查询出包含e这个字符的字符串
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF like[cd] ‘*e*‘ "]; //*表示通配符

    NSArray *temp = [array1 filteredArrayUsingPredicate:predicate];

    NSLog(@"temp ====\n%@",temp);

}

打印结果如下:

temp ====

(

anne,

reserved,

type,

soure,

version

)

最后附上所有的相关的条件字符

 

 

时间: 2024-10-12 13:27:06

NSPredicate 的使用的相关文章

iOS 中文字符判断 正则NSRegularExpression 谓词NSPredicate 和 NSRange

废话不说,直接上代码 #pragma mark - 中文字符判断 - (BOOL)validateContainsChinese:(NSString *)content { NSRegularExpression *regularexpression = [[NSRegularExpression alloc] initWithPattern:@"^[\u4e00-\u9fa5]" options:NSRegularExpressionCaseInsensitive error:nil

谓词(NSPredicate)

OC中的谓词操作是针对于数组类型的,他就好比数据库中的查询操作,数据源就是数组,这样的好处是我们不需要编写很多代码就可以去操作数组,同时也起到过滤的作用,我们可以编写简单的谓词语句,就可以从数组中过滤出我们想要的数据.非常方便.在Java中是没有这种技术的,但是有开源的框架已经实现了此功能. 下面来看一下具体的例子吧: Person.h [objc] view plain copy // //  Person.h //  46_NSPredicate // //  Created by jian

iOS之谓词(NSPredicate)(正则表达式和UIBarController)

iOS之NSPredicate(正则表达式和UIBarController) 本文转发至:https://segmentfault.com/a/1190000000623005 NSPredicate,这个类和我上一篇博文中提到的valueForKeyPath一样很强大.它的使用主要集中在两个方法中 NSArray - (NSArray *)filteredArrayUsingPredicate:(NSPredicate *)predicate; NSMutableArray - (void)f

iOS之NSPredicate(正则表达式和UIBarController):谓词

//  实例化对象的头文件 @property (nonatomic, strong)NSString *name;@property (nonatomic, assign)NSString *sex;@property (nonatomic, assign)NSInteger tel;@property (nonatomic, assign)NSInteger qq; - (Member *)initWithDic:(NSDictionary *)dic;+ (Member *)memberW

[示例]NSPredicate基础-查询数组中负荷条件的子集

代码: #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { /* 简述:Cocoa框架中的NSPredicate用于查询,原理和用法都类似于SQL中的where,作用相当于数据库的过滤取. 定义(最常用到的方法): NSPredicate这个类有点类似于数据库中的查询,是用于在一批内容中查询符合条件的子集,中文翻译成“谓词”.这个翻译实在让我感觉很别扭,虽然

iOS-OC-基础-NSPredicate常用方法

NSpredicate 常用方法 // 谓词的条件查询 > .< .==.!= NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"age > 20"]; NSArray *arr1 = [stuArray filteredArrayUsingPredicate:predicate1]; NSLog(@"arr1 = %@",arr1); //使用表达式 NSPredicate

iOS中的过滤器和正则表达式(NSPredicate,NSRegularExpression)

参考链接:http://www.cocoachina.com/industry/20140321/8024.html NSPredicate Cocoa提供了一个NSPredicate类,它用来指定过滤器的条件 初始化方法 + (NSPredicate *)predicateWithFormat:(NSString *)predicateFormat, ...; Format: /** 1.格式说明符 %d和%@等插入数值和字符串,%K表示key 还可以引入变量名,用$,类似环境变量,如:@"n

【学习ios之路:UI系列】NSPredicate相关用法

NSPredicate NSPredicate是一个Foundation类,它指定数据被获取或者过滤的方式. 它的查询语言就像SQL的WHERE和正则表达式的交叉一样,提供了具有表现力的,自然语言界面来定义一个集合被搜寻的逻辑条件. NSPredicate的几种用法 ①常见形式 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name == 'zhangdan'"]; //注意:如果谓词串中的文本块未被引用,则被看

CoreData用法三: NSPredicate在CoreData中的使用

NSPredicate在CoreData中常用作查询使用,相当于sql语句中的where查询子句. 最常用的方法为: NSPredicate *ca = [NSPredicate predicateWithFormat:(NSString *), ...]; 比如我们要查询student表中name="jjy"的信息,我们可以这样去用NSPredicate NSEntityDescription * emEty = [NSEntityDescription entityForName:

HTTPPost/AFNetWorking/JSONModel/NSPredicate

一.HTTPPost================================================ 1. POST方式发送请求 HTTP协议下默认数据发送请求方法是GET方式,若需要使用POST方法,则需要对发送的请求也就是request对象,进行属性设置. 步骤如下: > 要发送的请求对象,需要使用可变请求对象 [[NSMutableURLRequest alloc] initWithURL:] 此时创建的请求对象,其相关属性是可以进行设置的,通过NSURLRequest创建