gpt4 book ai didi

ios - 使用 NSPredicate OR 语句进行搜索的最有效方法

转载 作者:可可西里 更新时间:2023-11-01 06:19:16 25 4
gpt4 key购买 nike

我试图在之前的帖子中构建一个谓词,但最终以这种方式完成,因为 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com