2011-05-26 26 views
8

是否可以在NSArray中查找給定值是否存在於數組中(不使用for循環搜索它)?任何默認的隨機方法。我經歷了documentation,但沒有發現太多相關。通過傳遞值查找NSArray的索引

請同時告訴我關於valueForKey方法(我無法從doc中獲取)。

回答

10

containsObject:方法通常會給你什麼你問 - 雖然它的名字聽起來像你要查詢特定實例(即兩個對象具有相同的語義將不匹配)它實際上調用isEqual:上的對象,所以它正在測試

如果您希望項目的索引(如標題所示)使用indexOfObject:,它還會調用isEqual:來查找匹配項。

valueForKey:適用於有字典數組的情況;它會在每個字典中查找關鍵字並返回結果數組。

6

我相信你想使用indexOfObject方法。從the documentation

indexOfObject:

返回最低索引其 相應的數組值等於 給定的對象。

- (NSUInteger)indexOfObject:(id)anObject

參數

anObject

An object. 

返回值

最低索引,其相應的 陣列值等於噸anObject。如果 陣列中沒有任何對象是 等於anObject,則返回NSNotFound

討論

的對象被認爲是相等的,如果 isEqual:返回YES

重要:如果anObjectnil的 異常。

+0

感謝您的最快準確的響應和編輯(+1爲),但正如我所問,CRD也描述了valueForKey。 – rptwsthi 2011-05-26 05:34:13

0

使用NSPredicate來過濾NSArray基於NSDictionary

array = [dictionary filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(key == %@)", value]]; 

if([array count]>0) 
{ 
value exists; 
} 
4

您可以使用:

NSInteger idx = [myArray indexOfObject:obj]; 

找對象的索引。
並檢查對象是有或沒有在數組你可以使用:

- (BOOL)containsObject:(id)anObject 
0

結合objectAtIndexindexOfObject這樣的:

[tmpArray objectAtIndex:[tmpArray indexOfObject:yourObject]];