2011-06-24 93 views
2

我有一個NSMutableArray調用myObjectArray其中包含和調用myObject的NSObjects數組。 myObject有兩個字段(元素?),它們是NSString的。像這樣:匹配NSString對數組的NSString字段

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

我有一個NSMutableArray包含這些對象的約50%,都具有不同的字符串1的1和字符串的。那麼我有和獨立NSString變量,叫otherString;

有沒有一種快速的方法來訪問從myObjectArray其string1匹配otherString的myObject?

我應該說,這是我,但我不知道是否有一個更快的方法:

-(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 
     } 

    } 

} 
+0

我應該說,這是我的,但我不知道是否有更快的方式: –

回答

2

有幾個方法可以做到這一點,

使用謂詞

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

現在filteredArray擁有所有myObject實例有他們string1 matchi ng otherString

使用indexOfObjectPassingTest:

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

如果有滿足條件的對象,index將指向你它的索引。否則它將有值NSNotFound

如果您希望所有符合條件的對象,還可以查看indexesOfObjectsPassingTest:

+0

aha。這是更快。現在讓我試試吧.. –

+0

好吧,它看起來應該工作,但我得到這個錯誤:: 不兼容的塊指針類型初始化'signed char(^)(struct myObject *,NSUInteger,BOOL *) ',期待'BOOL(^)(struct objc_object *,NSUInteger,BOOL *)' –

+0

更新了答案。 –