将NSString与数组的NSString字段进行匹配

时间:2011-06-24 05:54:45

标签: objective-c nsstring matching

我有一个名为myObjectArray的NSMutableArray,其中包含名为myObject的NSObjects数组。 myObject有两个字段(元素?),它们是NSString。像这样:

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

我有一个NSMutableArray,其中包含大约50个这些对象,所有对象都有不同的string1和string2。然后我有一个独立的NSString变量,叫做otherString;

是否有一种从myObjectArray访问myObject的快速方法,其string1与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 个答案:

答案 0 :(得分:2)

有几种方法可以做到这一点,

使用谓词

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: