NSPredicate 利用谓词过滤做判断

转载 2015年11月20日 15:28:07
Cocoa提供了一个类NSPredicate类,该类主要用于指定过滤器的条件,该对象可以准确的描述所需条件,对每个对象通过谓词进行筛选,判断是否与条件相匹配。谓词表示计算真值或假值的函数。 NSPredicate *predicate; predicate=[NSPredicatepredicateWithFormat:@"name=='Herbie'"];//用predicateWithFormat创建一个谓词,name作为键路径 BOOL match=[predicateevaluateWithObject:car];//car作为接收对象,evaluateWithObject返回一个bool值。 NSLog(@"%s",(match)?"YES":"NO"); predicate = [NSPredicatepredicateWithFormat:@"engine.horsepower > 150"]; NSArray *cars = [garage cars]; for (Car *car in [garage cars]) { if ([predicate evaluateWithObject: car]) { NSLog (@"%@", car.name); } }遍历cars判断是否是真,然后输出。 predicate = [NSPredicatepredicateWithFormat:@"engine.horsepower > 150"]; NSArray *results; results = [carsfilteredArrayUsingPredicate: predicate];//它将循环过滤数组内容,根据谓词计算每个对象的值,并将值为YES的对象累计到将被返回的新数组中。 NSLog (@"%@", results);filteredArrayUsingPredicate这个方法可以得到我们所需要的值。加上 NSArray *names; names=[results valueForKey:@"name"]; NSLog (@"%@", names);就和上面的值一样。 NSMutableArray *carsCopy = [carsmutableCopy]; [carsCopyfilterUsingPredicate: predicate];//filterUsingPredicate和NSMutableArray构成新数组。 NSLog (@"%@", carsCopy); predicate = [NSPredicatepredicateWithFormat:@"engine.horsepower > %d", 50]; results = [cars filteredArrayUsingPredicate: predicate]; NSLog (@"%@", results); NSPredicate *predicateTemplate; NSDictionary *varDict; predicateTemplate = [NSPredicatepredicateWithFormat: @"engine.horsepower > $POWER"];//创建一个键/值字典来存储,这里$符号用于变量 varDict = [NSDictionarydictionaryWithObjectsAndKeys: [NSNumbernumberWithInt: 150],@"POWER", nil];//@后面参数名 predicate = [predicateTemplatepredicateWithSubstitutionVariables: varDict]; results = [cars filteredArrayUsingPredicate: predicate]; NSLog (@"%@", results); predicate = [NSPredicatepredicateWithFormat: @"(engine.horsepower > 50) AND (engine.horsepower < 200)"];//可以运用运算符 results = [cars filteredArrayUsingPredicate: predicate]; NSLog (@"oop %@", results); predicate = [NSPredicatepredicateWithFormat: @"engine.horsepower BETWEEN { 50, 200 }"];//这里可以运用between关键字。和上面效果一样 results = [cars filteredArrayUsingPredicate: predicate]; NSLog (@"%@", results); NSArray *betweens = [NSArray arrayWithObjects: [NSNumbernumberWithInt: 50], [NSNumbernumberWithInt: 200],nil]; predicate = [NSPredicatepredicateWithFormat: @"engine.horsepower BETWEEN %@", betweens]; results = [cars filteredArrayUsingPredicate: predicate]; NSLog (@"%@", results); predicateTemplate = [NSPredicatepredicateWithFormat:@"engine.horsepower BETWEEN $POWERS"]; varDict = [NSDictionarydictionaryWithObjectsAndKeys: betweens, @"POWERS", nil]; predicate = [predicateTemplatepredicateWithSubstitutionVariables: varDict];//用变量 results = [cars filteredArrayUsingPredicate: predicate]; NSLog (@"%@", results); predicate = [NSPredicatepredicateWithFormat:@"name < 'Newton'"];//不等号不仅可以用于数字,也可以用于字符串值。 results = [cars filteredArrayUsingPredicate: predicate]; NSLog (@"%@", [results valueForKey: @"name"]); predicate = [NSPredicatepredicateWithFormat:@"name IN { 'Herbie', 'Snugs', 'Badger', 'Flap' }"];//包含在其中用IN results = [cars filteredArrayUsingPredicate: predicate]; NSLog (@"%@", [results valueForKey: @"name"]); predicate = [NSPredicatepredicateWithFormat:@"SELF.name IN { 'Herbie', 'Snugs', 'Badger', 'Flap' }"];//self关键字 results = [cars filteredArrayUsingPredicate: predicate]; NSLog (@"%@", [results valueForKey: @"name"]); names = [cars valueForKey: @"name"]; predicate = [NSPredicatepredicateWithFormat:@"SELF IN { 'Herbie', 'Snugs', 'Badger', 'Flap' }"];//self关键字 results = [namesfilteredArrayUsingPredicate: predicate]; NSLog (@"%@", results); predicate = [NSPredicatepredicateWithFormat:@"name BEGINSWITH 'Bad'"];//字符串运算符BEGINSWITH,ENDSWITH,CONTAINS[c][d][cd] results = [cars filteredArrayUsingPredicate: predicate]; NSLog (@"%@", results); BEGINSWITH:检查某个字符串是否以另一个字符串开头。 ENDSWITH:检查某个字符串是否以另一个字符串结尾。 CONTAINS:检查某个字符串是否以另一个字符串内部。 [c]不区分大小写[d]不区分发音符号即没有重音符号[cd]既不区分大小写,又不区分发音符号。 predicate = [NSPredicatepredicateWithFormat:@"name LIKE[cd] '*er*'"];//*代表通配符Like还接受[cd]. results = [cars filteredArrayUsingPredicate: predicate]; NSLog (@"%@", results); predicate = [NSPredicatepredicateWithFormat:@"name LIKE[cd] '???er*'"];//?只匹配一个字符并且还可以接受[cd]. results = [cars filteredArrayUsingPredicate: predicate]; NSLog (@"%@", results);

iOS---NSPredicate谓词的用法 数组过滤

转载自:http://blog.csdn.net/lmf208/article/details/38345321 NSPredicate是什么 NSPredicate:谓词...
  • iotjin
  • iotjin
  • 2015年12月05日 16:06
  • 466

NSPredicate 谓词总结 数组过滤 模糊匹配

NSPredicate 用于指定过滤条件,主要用于从集合中分拣出符合条件的对象,也可以用于字符串的正则匹配。 NSPredicate常用方法介绍 1.创建NSPredicate(相当于创建一个过滤条件...
  • daiyelang
  • daiyelang
  • 2014年01月20日 09:47
  • 10594

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

在前一篇文章中我们介绍了OC中一个重要技术通知:http://blog.csdn.net/jiangwei0910410003/article/details/41923401,今天我们在来看一下OC...
  • jiangwei0910410003
  • jiangwei0910410003
  • 2014年12月14日 10:39
  • 29783

数组谓词查询法 NSPredicate

NSPredicate:谓词 字面翻译是这个意思,但是我觉得谓词这个词太难以理解了 NSPredicate的具体用途应该还是过滤,类似于过滤条件之类的,相当于一个主语的谓语,所以说会是谓词...
  • s3590024
  • s3590024
  • 2016年07月13日 13:52
  • 414

iOS中的谓词(NSPredicate)使用

首先,我们需要知道何谓谓词,让我们看看官方的解释: The NSPredicate class is used to define logical conditions used to co...
  • sky_yang1024
  • sky_yang1024
  • 2016年02月25日 11:09
  • 636

iOS过滤数据字典

在做iOS时想要根据一个组织中的字典的一个值来过滤这个数组中的字典,想了好多办法,看到一种简便的,根据谓词来过滤数据。 dataArray = [[NSMutableArra...
  • COOL_BEAR_XX
  • COOL_BEAR_XX
  • 2016年06月22日 19:51
  • 1240

iOS 查询数组中的对象 谓词NSPredicate

1.NSString 对象    NSArray  *array =@["123", @"234" , @"345"];  NSPredicate *predicate = [NSPredicate ...
  • wjwc2014
  • wjwc2014
  • 2016年08月05日 14:21
  • 237

iOS SDK详解之NSPredicate(Swift)

原创Blog,转载请注明出处 blog.csdn.net/hello_hwc前言:谓词在集合过滤以及CoreData中有着广泛的应用。本文以Playground上的Swift代码为例,讲解如何使用N...
  • Hello_Hwc
  • Hello_Hwc
  • 2015年05月16日 11:44
  • 5093

ios NSPredicate 谓词过滤

// NSPredicate :是Foundation框架提供的用来指定过滤条件的类。该类主要用于指定过滤器的条件,该对象可以准确的描述所需条件,对每个对象通过谓词进行筛选,判断是否与条件相匹配。 ...
  • yc081323
  • yc081323
  • 2016年08月12日 10:40
  • 150

用于过滤集合的条件对象NSPredicate

NSPredicate-指定过滤条件,用来在内存中过滤集合对象 假如有一个集合对象NSArray,而你想通过输入一个条件而得到满足条件的对象,那么可以使用NSPredicate来进行过滤。 例: ...
  • mobailwang
  • mobailwang
  • 2014年05月04日 11:48
  • 3951
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:NSPredicate 利用谓词过滤做判断
举报原因:
原因补充:

(最多只允许输入30个字)