作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我试图在之前的帖子中构建一个谓词,但最终以这种方式完成,因为 3 小时后,我无法让它工作。
我觉得必须有更有效的方法,而且我需要谓词不区分大小写。
10,000 辆汽车我有一个轮胎、车轮、座椅作为三个汽车零件我想找到所有有轮胎的汽车。然后我想找到所有有轮子的汽车。然后我想找到所有有座位的汽车。(我知道很多会重复,但这就是我需要的)
请告诉我是否有更有效的方法。另外请让我知道如何使谓词不区分大小写。
提前致谢!
-(NSArray*) loadCarsFromCoreData:(NSMutableArray*)inputCarParts{
NSMutableArray *totalResults=[[NSMutableArray alloc]init];
NSFetchRequest *fetchRequest =[[NSFetchRequest alloc]init];
//To find the cars we are using the car parts
NSEntityDescription *entity = [NSEntityDescription entityForName:@"CarParts" inManagedObjectContext:[self managedObjectContext]];
[fetchRequest setEntity:entity];
NSError *error;
NSMutableArray *predicates =[self parseCarPartsIntoAPredicateArray:inputCarParts];
for (int i=0; i<[predicates count]; i++) {
[fetchRequest setPredicate:[predicates objectAtIndex:i]];
NSArray *records = [[self managedObjectContext] executeFetchRequest:fetchRequest error:&error];
NSLog(@"results = %i",[records count]);
[totalResults addObjectsFromArray:records];
}
NSLog(@"results = %i",[totalResults count]);
return [NSArray arrayWithArray:totalResults];
}
-(NSMutableArray*)parseCarPartsIntoAPredicateArray:(NSMutableArray*)inputCarParts{
NSMutableArray *returnArray=[[NSMutableArray alloc]init];
for (int i=0; i<[inputCarParts count]; i++) {
NSPredicate *predicate=[NSPredicate predicateWithFormat:@"partName == %@",[inputCarParts objectAtIndex:i]];
[returnArray addObject:predicate];
}
return returnArray;
}
最佳答案
听起来您真正要寻找的是如何根据可能匹配项的数组构造谓词。在那种情况下,你会做这样的事情:
NSMutableArray *partPredicates = [NSMutableArray arrayWithCapacity:[inputCarParts count]];
for (NSString *partName in inputCarParts) {
NSPredicate *currentPartPredicate = [NSPredicate predicateWithFormat:@"partName =[c] %@", partName];
[partPredicates addObject:currentPartPredicate];
}
NSPredicate *fullPredicate = [NSCompoundPredicate orPredicateWithSubpredicates:partPredicates];
结果谓词将类似于 partName ==[c] "tire"OR partName ==[c] "wheel"OR partName ==[c] "seat"
,其中一个每个数组条目的组件。进行一次提取以一次性评估它们。
如果您在提取中使用它,这将不会得到重复的结果。您对表明您不想重复的问题发表评论。如果是这种情况,那么我不确定我知道很多会重复,但这就是我需要的。听起来你想要骗子,但你说你不想。
关于ios - 使用 NSPredicate OR 语句进行搜索的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14126766/
我是一名优秀的程序员,十分优秀!