сопоставить NSString с полем NSString массива - PullRequest
2 голосов
/ 24 июня 2011

У меня есть NSMutableArray с именем myObjectArray, который содержит и массив NSObjects с именем myObject. myObject имеет два поля (элементы?), которые NSString. как это:

@interface myObject : NSObject {
   NSString * string1;
   NSString * string2;
}

У меня есть NSMutableArray, который содержит около 50 из этих объектов, все с разными string1 и string2. тогда у меня есть и независимая NSString переменная, называемая otherString;

Существует ли быстрый способ доступа к myObject из myObjectArray, строка которого1 соответствует otherString?

Я должен сказать, что это то, что у меня есть, но мне интересно, есть ли более быстрый путь:

-(void) matchString: {

    NSString * testString = otherString;
    for(int i=0; i<[myObjectArray count];i++){
    myObject * tempobject = [myObjectArray objectAtIndex:i];
        NSString * tempString = tempobject.string1;
        if ([testString isEqualToString:tempString]) {
            // do whatever
        }

    }

}

1 Ответ

2 голосов
/ 24 июня 2011

Есть несколько способов сделать это:

Использование предикатов

NSPredicate * filterPredicate = [NSPredicate predicateWithFormat:@"string1 MATCHES[cd] %@", otherString];
NSArray * filteredArray = [myObjectArray filteredArrayUsingPredicate:filterPredicate];

Теперь filteredArray имеет все myObject экземпляров, которые имеют своиstring1 совпадение otherString.

Использование indexOfObjectPassingTest:

NSUInteger index = [myObjectArray indexOfObjectPassingTest:^(BOOL)(id obj, NSUInteger idx, BOOL *stop){
    myObject anObject = obj;
    return [anObject.string1 isEqualToString:otherString];
}

Если существует объект, удовлетворяющий условию, index укажет на его индекс,В противном случае он будет иметь значение NSNotFound.

. Вы также можете посмотреть на indexesOfObjectsPassingTest:, если хотите, чтобы все объекты удовлетворяли условию.

...