2

我有一个对象的 NSArray,其属性包括 firstName、lastName、clientID 等,我想根据搜索关键字对数组执行搜索。必须根据名字和姓氏属性检查此关键字,并返回原始数组的子集,该子集仅包含名字/姓氏包含搜索词的对象。有没有有效/快速的方法来做到这一点?

4

3 回答 3

11

作为第二个想法,我认为-filteredArrayUsingPredicate:可能对你更好。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K = %@", @"firstName", @"Bob"];
NSArray *filteredArray = [array filteredArrayUsingPredicate:predicate];

这会从数组中返回名字为“Bob”的对象的子数组。

于 2012-10-17T14:26:33.560 回答
7

我想你在寻找-indexesOfObjectsPassingTest:

NSIndexSet *indexSet = [array indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
    MyObject *myObject = (MyObject *)obj;
    return [myObject.firstName isEqualToString:@"Bob"];
}];

这将返回数组中第一个名称为“Bob”的所有对象的索引集。

于 2012-10-17T14:17:08.880 回答
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];
}
于 2012-10-17T14:26:44.477 回答