搜索数组中对象的属性

时间:2012-10-17 14:10:01

标签: objective-c ios xcode

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

3 个答案:

答案 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];
}