谓词(搜索)

 1 #import <Foundation/Foundation.h>
 2 #import "Person.h"
 3
 4 int main(int argc, const char * argv[]) {
 5     @autoreleasepool {
 6         Person *person1 = [[Person alloc] initWithName:@"Mary" andAge:13 andGender:@"girl"];
 7         Person *person2 = [[Person alloc] initWithName:@"Tom" andAge:16 andGender:@"boy"];
 8         Person *person3 = [[Person alloc] initWithName:@"Linda" andAge:20 andGender:@"girl"];
 9         Person *person4 = [[Person alloc] initWithName:@"Jerry" andAge:32 andGender:@"boy"];
10         Person *person5 = [[Person alloc] initWithName:@"Sam" andAge:24 andGender:@"boy"];
11
12         NSArray *personArr = @[person1, person2, person3, person4, person5];
13 #pragma mark 关系运算符
14         // 创建谓词,用于指定过滤条件 -- 年龄大于20
15         NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"age > 20"];
16         // 遍历数组
17         for (Person *person in personArr) {
18             // 判断person是否符合谓词里所定义的条件
19             if ([predicate1 evaluateWithObject:person]) {
20                 NSLog(@"person = %@", person);
21             }
22         }
23 #pragma mark 快速筛选数组
24         // 过滤数组,找到符合条件的元素,存到数组中
25         NSArray *resultArr = [personArr filteredArrayUsingPredicate:predicate1];
26         NSLog(@" > %@", resultArr);
27
28 #pragma mark 逻辑运算符 and与 or或 not非
29         // 年龄大于20岁的女生
30         NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"age < 20 && gender = ‘girl‘"];
31         resultArr = [personArr filteredArrayUsingPredicate:predicate2];
32         NSLog(@"and%@", resultArr);
33
34 #pragma mark 范围运算符 between在...之间  in包含的关系
35         // 年龄在16到24之间的人,包含16和24
36         NSPredicate *predicate3 = [NSPredicate predicateWithFormat:@"age between {16, 24}"];
37         resultArr = [personArr filteredArrayUsingPredicate:predicate3];
38         NSLog(@"between%@", resultArr);
39
40         // 姓名是mary 和 tom的人
41         NSPredicate *predicate4 = [NSPredicate predicateWithFormat:@"name in {‘Mary‘, ‘Tom‘}"];
42         resultArr = [personArr filteredArrayUsingPredicate:predicate4];
43         NSLog(@"in %@", resultArr);
44
45 #pragma mark 占位符 $
46 //        NSPredicate *predicate5 = [NSPredicate predicateWithFormat:@"name = $Name"];
47         NSPredicate *predicate5 = [NSPredicate predicateWithFormat:@"age < $Age and gender = $Gender"];
48         NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"Linda", @"Name", @20, @"Age", @"girl", @"Gender" ,nil];
49         predicate5 = [predicate5 predicateWithSubstitutionVariables:dictionary];
50         resultArr = [personArr filteredArrayUsingPredicate:predicate5];
51         NSLog(@"占位符%@", resultArr);
52
53 #pragma mark 字符串运算符
54         NSArray *strArray = @[@"Hello", @"world", @"hey", @"kitty"];
55         // 以字符串he开头,忽略大小写
56         NSPredicate *predicate6 = [NSPredicate predicateWithFormat:@"self beginswith[c] ‘he‘"];
57         resultArr = [strArray filteredArrayUsingPredicate:predicate6];
58         NSLog(@"beginswith%@", resultArr);
59         // 包含o的
60         NSPredicate *predicate7 = [NSPredicate predicateWithFormat:@"self contains ‘o‘"];
61         resultArr = [strArray filteredArrayUsingPredicate:predicate7];
62         NSLog(@"contains%@", resultArr);
63
64 #pragma mark LIKE运算符
65         NSPredicate *predicate8 = [NSPredicate predicateWithFormat:@"self like[c] ‘h*‘"];
66         resultArr = [strArray filteredArrayUsingPredicate:predicate8];
67         NSLog(@"like %@", resultArr);
68
69 #pragma mark 正则表达式
70         // 验证邮箱
71         NSString *str = @"^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$";
72         NSPredicate *predicate9 = [NSPredicate predicateWithFormat:@"self matches %@", str];
73         if ([predicate9 evaluateWithObject:@"http://www.ba"]) {
74             NSLog(@"正确");
75         } else {
76             NSLog(@"错误");
77         }
78     }
79     return 0;
80 }

时间: 2024-10-11 15:35:43

谓词(搜索)的相关文章

用谓词搜索实现本地搜索

从网络请求数据,然后存储到数组中,这时候要进行搜索,我们可以使用谓词搜索. - (void) textFieldDidChange:(UITextField*) TextField{ NSString *conditionStr = TextField.text; NSLog(@"+++++%@", conditionStr); // 2. 创建谓词,准备进行判断的工具 NSPredicate *predicate = [NSPredicate predicateWithFormat:

NSPredicate谓词搜索使用小记

iOS中的搜索正常情况下用NSPredicate都足以解决问题,比如我们有一个原数组_dataArraty: NSPredicate*predicate =[NSPredicate predicateWithFormat:@"name like %@", searchTexts]; NSArray * resultArr = [_dataArray filteredArrayUsingPredicate:predicate]; like语法可以匹配搜索 一般情况下,搜索是否包含某个字符

ios UISearchDisplayController 实现 UITableView 搜索功能

UISearchDisplayController 是苹果专为 UITableView 搜索封装的一个类. 里面内置了一个 UITableView 用于显示搜索的结果.它可以和一个需要搜索功能的 controller 关联起来,其它的像原 TableView 和搜索结果 TableView 的切换, mask 的显示等等都 封装好了,使用起来非常非常的简单.特别是要实现全屏搜索时使用最多. 全屏搜索的意思是如果你用了  NavigationBar 当点击搜索框时 TableView 会自动弹上去

UITableView的搜索:SearchBar和SearchDisplayController;UISearchController

之前我写过一篇关于在tableView中利用谓词搜索的随笔,当时使用的是自定义textField,最近在写电子书,需要在书目时实现搜索功能.所以在此把以前用于实现搜索功能系统提供的的SearchBar和SearchDisplayController的方法在这里和大家分享一下.不过在iOS8滞后,苹果已经不再推荐我们是使用这两个旧东西,而是让我们使用UISearchController,自然我也会把这个新东西的用法在这里演示一下. SearchBar和SearchDisplayController

[iOSDemo 搜索框]

// // MainViewController.h // UISearchDisplayControllerDemo // // Created by Enwaysoft on 14-8-20. // Copyright (c) 2014年 Enway. All rights reserved. // #import <UIKit/UIKit.h> @interface MainViewController : UITableViewController{ NSArray *data; NS

ios UITableView 搜索

自己实现 UITableView 搜索,相对于使用 UISearchDisplayController 来说自己写稍微麻烦了那么一点点,但是更加灵活.主要就是用一个字段区分出当前是搜索还是非搜索,然后 reload 相应的 data 就行了,和 UISearchDisplayController 的实现也很像,不过 UISearchDisplayController是两个 tableview 切换,这里我们是一个 tableview load 不同的数据. 关键代码: @interface Ma

iOS--- UITableView + UISearchDisplayController - - - - -实现搜索功能

iOS中UISearchDisplayController用于搜索,搜索栏的重要性我们就不说了,狼厂就是靠搜索起家的,现在越来越像一匹没有节操的狼,UC浏览器搜索栏现在默认自家的神马搜索,现在不管是社交,O2O还是在线教育等都会有一个搜索栏的实现,不过彼此实现效果是不一样的.iOS中的搜索栏实现起来相对简单一点,网上也有很多参考资料,不过靠谱的不是很多,很多都是iOS 8.0之前的实现,iOS 8.0上的实现貌似很少看到,可以运行,不过会看到searchDisplayController' is

iOS 字符串搜索方法大全

字符串搜索主要用于UITableView的搜索功能的筛选,过滤,查询 下面是一些流行的搜索查询方法 一.遍历搜索 for循环 根据要求:精确搜索(判读字符串相等)   模糊搜索(字符串包含) 相关知识点 在一个字符串中搜索子字符串 NSString *str1 = @"can you stest speak English"; NSString *str = @"stest"; //在str1这个字符串中搜索stest,推断有没有 if ([str1 rangeOf

iOS开发-NSPredicate

Cocoa中谓词(Predicate)提供了一个通用的查询方式处理数据,可以获取和指定数据的过滤形式,Cocoa实际开发中可以是使用NSPredicate及其父类NSComparisonPredicate和NSCompoundPredicate.其风格类似于SQL查询语言和正则表达式的混合体,提供了具有表现力的,自然语言界面来定义一个集合被搜寻的逻辑条件.一般来说稍微操作过数据库基本上很容易理解其中的方法,至于使用的方法也很简单. 集合中的NSPredicate Foundation提供使用谓词

UISearchController 很坑

最近一个项目用到了很多搜索 踩了一大波坑 还要继续踩下去 直接上代码了 <UISearchControllerDelegate,UISearchResultsUpdating> //声明 @property (nonatomic,retain) UISearchController *searchController; - (void)createUI{ self.searchController = [[UISearchController alloc]initWithSearchResul