我有一个NSArray对象具有firstName,lastName,clientID等属性,我想基于搜索关键字对数组执行搜索。必须根据名字和姓氏属性检查此关键字,并返回原始数组的子集,该子集仅包含名字/名字包含搜索词的对象。有没有有效/快速的方法来做到这一点?
答案 0 :(得分:11)
作为第二个想法,我认为-filteredArrayUsingPredicate:
对你来说可能更好。
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K = %@", @"firstName", @"Bob"];
NSArray *filteredArray = [array filteredArrayUsingPredicate:predicate];
这将返回数组中具有名字“Bob”的对象的子数组。
答案 1 :(得分:7)
我认为您正在寻找-indexesOfObjectsPassingTest:
NSIndexSet *indexSet = [array indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
MyObject *myObject = (MyObject *)obj;
return [myObject.firstName isEqualToString:@"Bob"];
}];
这将返回数组中所有对象的索引集,其名称为“Bob”。
答案 2 :(得分:0)
另一种返回仅包含匹配对象的新数组的方法:
-(NSArray *)matchingClientsFromArray:(NSArray *)objects withFirstName:(NSString *)firstName andLastName:(NSString *)lastName{
NSMutableArray *objectArray = [NSMutableArray new];
for (Client *client in objectArray){
if ([client.firstName isEqualToString:firstName] &&
[client.lastName isEqualToString:lastName]) {
[objectArray addObject:client];
}
}
return [objectArray copy];
}