2

firstName、lastName、clientID などのプロパティを持つオブジェクトの NSArray があり、検索キーワードに基づいて配列を検索したいと考えています。このキーワードは、名と姓のプロパティに対してチェックし、名/姓に検索語が含まれるオブジェクトのみを含む元の配列のサブセットを返す必要があります。これを行う効率的/高速な方法はありますか?

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 に答える