谓词技术的使用 NSPredicate
来源:互联网 发布:预装软件下载 编辑:程序博客网 时间:2024/05/11 02:48
前言
在进行一些数据的筛选的时候经常使用到它。
例如: CoreData的数据查询、按照特定条件(日期)排序的数据、从数组进行数据查询等等。
正文
谓词技术的使用 NSPredicate (以一定的条件(特定日期)过滤maTemp数组,即进行大数据搜索。)
示例一,将含有日期属性的对象数组中,进行按照日期重新进行分组
使用谓词进行数据分组 (数组元素为 自定义类型)
//2.按照日期进行分组展示// 重新按照日期进行分组组织数据// 找出不重复的日期 /** 对象操作: 针对数组的情况 @distinctUnionOfObjects:返回指定属性去重后的值的数组 @unionOfObjects:返回指定属性的值的数组,不去重 属性的值不能为空,否则产生异常。*/ //1)取出日期分组 NSArray *arDistinct = [maTemp valueForKeyPath:@"@distinctUnionOfObjects.strDateCreated"];//maTemp是一些含有日期属性的对象集合 //2)构建排序规则NSComparator NSComparator cmptr = ^(id obj1, id obj2){ NSString *strData1 = obj1; NSString *strData2 = obj2; NSComparisonResult ret = [strData1 compare:strData2]; return ret; }; // 3)按数字从小到大进行排序(将最新的数据显示在前面) NSArray *arSorted = [arDistinct sortedArrayUsingComparator:cmptr]; arSorted = arSorted.reverseObjectEnumerator.allObjects;//顺序取反 NSPredicate *predicate = nil;// 4)按照日期进行分组 for (NSString *strDateCreated in arSorted) { predicate = [NSPredicate predicateWithFormat:@"strDateCreated == %@", strDateCreated]; NSArray *arFiltered = [maTemp filteredArrayUsingPredicate:predicate];//以一定的条件(特定日期)过滤maTemp数组,即进行大数据搜索。 OrderQueryGroupData *data = [OrderQueryGroupData alloc]; data.strDateCreated = strDateCreated; data.maOrderData = [NSMutableArray arrayWithArray:arFiltered]; data.maOrderDataF = [IPOrderDataFrame frameListWith:data.maOrderData]; [self.maOrderQuery addObject:data]; }
示例代码二: 数据的过滤,城市搜索
城市搜索
*/ //方式二: 谓词技术的使用 searchText = searchText.uppercaseString; NSPredicate *predicate = [NSPredicate predicateWithFormat:@" pinYinHead.uppercaseString contains %@ or name.uppercaseString contains %@ or pinYin.uppercaseString contains %@ ",searchText,searchText,searchText]; return [_cityModels filteredArrayUsingPredicate:predicate];}//方式一。+ (NSArray *)searchcityModelsWithSeatchText:(NSString *)searchText{ NSMutableArray *array = [NSMutableArray array]; searchText = [searchText uppercaseString]; for (DKCityModel *obj in _cityModels) { if ([obj.name.uppercaseString containsString:searchText] || [obj.pinYin.uppercaseString containsString:searchText] || [obj.pinYinHead.uppercaseString containsString:searchText]) { [array addObject:obj]; } } return array;}
示例代码3:银行列表的过滤
多个过滤条件的拼接
#pragma mark - ******** //列表的银行过滤- (void)predicateBankList{ if ([Session Instance].arrOnlySupportBankList.count == 0) { return; } NSMutableString *stringpredicate = [NSMutableString string] ;// for (NSString *code in ) {// if ([code isEqualToString:[Session Instance].arrOnlySupportBankList[0]]) {// [stringpredicate appendFormat:@" strBankNO == %@ ",code];// }else {// [stringpredicate appendFormat:@" strBankNO == %@ ",code];// }// } NSInteger count = [Session Instance].arrOnlySupportBankList.count; for (int i = 0; i<count;i++) { if (count == 1) { [stringpredicate appendFormat:@" strBankNO == '%@' ",[Session Instance].arrOnlySupportBankList[i]]; }else if (count>1){ if (i == 0) { [stringpredicate appendFormat:@" strBankNO == '%@' ",[Session Instance].arrOnlySupportBankList[i]]; }else{ [stringpredicate appendFormat:@"or strBankNO == '%@' ",[Session Instance].arrOnlySupportBankList[i]]; } } } if ([stringpredicate isEqualToString:@"" ] ) { return; } NSPredicate *predicate = [NSPredicate predicateWithFormat:stringpredicate]; self.bankListDepositCard = [NSMutableArray arrayWithArray:[ self.bankListDepositCard filteredArrayUsingPredicate:predicate]]; self.bankListCreditCard = [NSMutableArray arrayWithArray:[ self.bankListCreditCard filteredArrayUsingPredicate:predicate]];}
示例4: 字符串数组的过滤(数组元素为系统的自有类型)
字符串数组的过滤
/** BankInfoData 对象的 的银行卡编号是否包含在 arrOnlySupportBankList 银行卡编号数组中 @return bool */- (BOOL)isaBankSelectedEqualToBusinessBank:(KNData*)data{ NSArray *arrOnlySupportBankList= [KNSession Instance].arrOnlySupportBankList;//kevin NSArray *tmp = [NSArray array]; NSString *stringpredicate = [NSString stringWithFormat:@" self == '%@'",data.strBankNO]; NSPredicate *predicate = [NSPredicate predicateWithFormat:stringpredicate]; tmp = [NSMutableArray arrayWithArray:[ arrOnlySupportBankList filteredArrayUsingPredicate:predicate]]; if (tmp.count>0) { return YES; }else{ return NO; }}
例子5: Core Data的数据查询
例子:保存未读消息
#pragma mark - 保存未读消息/** 先查询,在修改 */+ (void)saveMessageWithMessage:(IPMessageDetailData*)data{ if (data.messageId == nil || data == nil){ return; } NSManagedObjectContext *context = [IPMessageDataTool shareContext]; NSFetchRequest *request = [[NSFetchRequest alloc] init]; request.entity = [NSEntityDescription entityForName:@"KNMessage" inManagedObjectContext:context]; // 设置排序(按照messageId降序) NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"messageId" ascending:NO]; request.sortDescriptors = [NSArray arrayWithObject:sort]; // 设置条件过滤(搜索name中包含字符串"Itcast-1"的记录,注意:设置条件过滤时,数据库SQL语句中的%要用*来代替,所以%Itcast-1%应该写成*Itcast-1*) NSPredicate *predicate = [NSPredicate predicateWithFormat:@"messageId = %@ AND operateID = %@",data.messageId,[SessionMgr Instance].operateID]; request.predicate = predicate; // 执行请求 // request.fetchLimit = 50; NSError *error = nil; NSArray *objs = [context executeFetchRequest:request error:&error]; if (error) { [NSException raise:@"查询错误" format:@"%@", [error localizedDescription]]; } Message *tmpMessage; if (objs.count>0) { tmpMessage = objs[0]; return; }else{ tmpMessage = [NSEntityDescription insertNewObjectForEntityForName:@"Message" inManagedObjectContext:context]; } tmpMessage.messageExpiredTime = data.messageExpiredTime; tmpMessage.messageIssueTime = data.messageIssueTime; tmpMessage.messageId = data.messageId; tmpMessage.messageTitle = data.messageTitle; tmpMessage.operateID = [SessionMgr Instance].operateID; tmpMessage.isRead = NO; BOOL success = [context save:&error]; if (!success) { [NSException raise:@"访问数据库错误" format:@"%@", [error localizedDescription]]; }}
使用谓词进行数据分组 (数组元素为 自定义类型)
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"Style == %@", [[NSNumber numberWithInteger:type] description]]; NSArray *arFiltered = [ model.List filteredArrayUsingPredicate:predicate];//以一定的条件(特定日期)过滤maTemp数组,即进行大数据搜索。 model.List = [NSMutableArray arrayWithArray:arFiltered]; return model;
阅读全文
0 0
- 谓词技术的使用 NSPredicate
- 谓词(NSPredicate)的使用
- 关于谓词NSPredicate的使用
- 谓词的使用(NSPredicate)
- oc中谓词的使用(NSPredicate)
- 实用知识:NSPredicate(谓词)的使用
- NSPredicate谓词过滤的简单使用
- NSMutableSet与NSMutableArray的使用,NSPredicate谓词
- iOS谓词的使用 (NSPredicate)
- iOS谓词使用--NSPredicate
- NSPredicate-谓词使用总结
- NSPredicate谓词的用法
- 【iOS开发技术】NSPredicate谓词的用法 数组过滤
- 【iOS开发技术】NSPredicate谓词的用法 数组过滤
- 【iOS开发技术】NSPredicate谓词的用法 数组过滤
- NSPredicate谓词搜索使用小记
- 109.NSPredicate-谓词使用总结
- [iOS学习] 谓词NSPredicate使用
- MarkDown使用小技巧
- C++__数据类型和表达式
- 捋顺 用于分类任务的softmax 和softmaxwithloss
- Libevent 官方文档学习笔记(1. libevent_core部分)
- 提高网速-MAC配置DNS服务器
- 谓词技术的使用 NSPredicate
- c++特点
- u3d 一直提示 sending message header failed
- AsyncTask浅析
- vim配置收集
- vue.js 踩坑
- 【Linux】中的守护进程
- 人为什么而活
- ML-决策树