打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
[IOS开发]搜索用谓词NSPredicate

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];//filterUsingPredicateNSMutableArray构成新数组。

    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:

             [NSNumbernumberWithInt150],@"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:

                     [NSNumbernumberWithInt50],[NSNumbernumberWithInt200],nil];

    predicate = [NSPredicatepredicateWithFormat@"engine.horsepowerBETWEEN %@", 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);

还可以使用MATCHES运算符。赋给该运算符一个正则表达式。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
【学习ios之路:UI系列】NSPredicate相关用法
iOS中的谓词(NSPredicate)使用
[iOS]查找数组NSArray中是否包含指定的元素
iOS NSPredicate的学习讲解
谓语的初了解
正则表达式不包含属性
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服