2011-02-09 6 views
1

내 응용 프로그램에서 NSDictionary의 객체를 보유하고있는 NSArray를 사용하고 있습니다. 각 사전에는 "YES"또는 "NO"(부울 값)를 저장하는 NSNumber 유형의 값을 보유하는 "Primary"가 있습니다. 그리고 배열의 사전 객체 만 "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

설명 할 수 있습니까? 당신이 쓴 코드에 대해 조금은? (나는 아이폰 코딩에 익숙하지 않다.) – Satyam

+0

당신이 정확히 무엇을하고 이해하지 않는지 말하면 안된다. –

+0

저는 iPhone 개발자입니다. 하지만 "(^) (id obj, NSUInteger idx, BOOL * stop)"과 같은 코드는 발견하지 못했습니다. 나는이 부분을 이해하지 못했다. – Satyam

0

"루프를 사용하지 않고"는 무엇을 의미합니까? 의미 은 for 루프를 작성하지 않거나 사용하는 루틴이 루프를 사용하지 않는다는 의미입니까? "선형 시간"이 아닌 "일정 시간"으로 답을 원하면 레코드에 대한 포인터 만 유지하면됩니다. 배열에 요소를 삽입/삭제하지 않은 경우 직접 루프를 수행하거나 NSArray를 사용하여 선형 시간 조회 이외의 다른 방법이 없습니다

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