2011-02-09 57 views
1

在我的應用程序中,我使用NSArray來存放NSDictionary的對象。 在每個字典中,有一個「Primary」保存存儲「YES」或「NO」(布爾值)的NSNumber類型的值。並且只有數組中的字典對象可以具有值「YES」。 不使用循環如何獲得「主」鍵爲YES的字典對象?iPhone - 迭代字典數組並獲取對象

回答

1

您可以調用NSArray上的便捷方法來查找該對象,但請注意,此類方法仍在內部使用循環來查找對象。

NSUInteger indexOfPrimary = [array indexOfObjectPassingTest:^(id obj, NSUInteger idx, BOOL *stop) { 
    return [[obj objectForKey:@"Primary"] boolValue]; 
}]; 
NSDictionary *primary = nil; 
if (indexOfPrimary != NSNotFound) { 
    primary = [array objectAtIndex:indexOfPrimary]; 
} 

另一種選擇是-[NSArray filteredArrayUsingPredicate:]

+0

你能解釋一下我關於你寫的代碼的一點點? (不要'介意我是新的iphone編碼) – Satyam 2011-02-09 12:44:11

0

你是什麼意思的「不使用循環」?意思不寫一個for循環,或者你的意思是說,你使用的任何程序不會使用循環?如果你想在「恆定時間」而不是「線性時間」的答案,你應該保持一個指向記錄的指針。如果你沒有自己的元素到數組的插入/缺失,則沒有,沒有比線性時間查找等方式,要麼自己做一個循環,或使用NSArray的

- (NSIndexSet *)indexesOfObjectsPassingTest:(BOOL (^)(id obj, NSUInteger idx, BOOL *stop))predicate