2012-10-17 40 views
2

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

+0

我不是试图做一个全名的比赛。如果我的搜索字词是前例。 “fr”的结果可能像Franz Smith,Frank Jones,John Frappe –

回答

6

我觉得你找-indexesOfObjectsPassingTest:

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

这将返回索引集与“鲍勃”的名字在阵列中的所有对象。

11

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

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

这将从数组中返回具有第一个名字“Bob”的对象的子数组。

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