2009-07-16 7 views
17

Objective C에 두 개의 배열이 있는데 어떤 인덱스를 찾을 필요가 있으므로 같은 위치에 삽입 할 수 있습니다. 예를 들어, "이름 배열"과 "연령 배열"이 있다고 가정 해 봅시다. "나이 배열"에 나이를 삽입 할 위치를 알 수 있도록 "charlie"인덱스가 "name array"에 있는지 어떻게 알 수 있습니까?Objective C에서 배열 인덱스를 결정하는 방법은 무엇입니까?

감사

답변

38

-[NSArray indexOfObject:]는 논리적 인 선택이 될 것 같다.

+0

네, 척, 덕분에 NSMutableArray 클래스 참조에서 찾을 수 없습니다. – Xcoder

+4

그래, NSMutableArray 워드 프로세서는 배열 변경과 관련된 메소드 만 포함하고있다. 수퍼 클래스 문서도 체크 아웃하는 것이 좋습니다. – Chuck

+1

문서를 사용하면 상속 된 메소드, ivars 및 속성을 쉽게 잊어 버릴 수 있습니다. Andy Lee의 AppKiDo 앱 사본을 받으십시오. 그러면 누락 된 부분을 쉽게 볼 수 있습니다. 어떤 수업은 새로운 관점에서 볼 때 이해하기 쉽습니다. – uchuugaka

4

문자열을 기반으로 조회를 수행하는 경우 NSDictionary도 사용할 수 있습니다.

+0

좋은 지적입니다. 사람들은 종종 사전에 문자열을 검색하는 동안 일정한 시간이 걸리는 반면 주어진 문자열에 대한 배열 검색은 선형 시간을 필요로한다는 사실을 간과합니다. Chuck은 어레이를 위해 그것을 수행하는 방법에 대해서는 올바르지 만, 스파 스 설명을 기반으로해서, 사전은 큰 잠재적 솔루션과 같이 보입니다. –

+2

그래도 상수가 크거나 줄이 짧으면 선형 시간이 상수 시간보다 빠를 수 있다는 것을 기억해야합니다. 기본적으로, 성능상의 문제라는 것을 측정하여 확인하기 전까지는 걱정하지 마십시오. –

6

코코아에서 병렬 배열은 파멸과 폐허로가는 길입니다. Bindings와 함께 효과적으로 사용할 수 없으므로 Bindings가없는 것처럼 많은 양의 접착제 코드를 작성해야합니다. 또한 구현하기 전에 AppleScript/Scripting Bridge 지원을 중단해야합니다.

올바른 방법은 nameage 속성을 사용하여 모델 클래스를 만들고 해당 클래스의 인스턴스를 단일 배열로 만드는 것입니다. 그런 다음 이름 또는 나이별로 항목을 찾으려면 NSPredicate을 사용하여 배열을 필터링하고 indexOfObjectIdenticalTo:을 사용하여 주 배열의 필터링 된 배열에서 각 항목의 색인을 찾으십시오.

indexOfObject:indexOfObjectIdenticalTo:의 차이는 전자가 후자 만이 전달 된 특정 개체를 찾습니다 반면, 각 객체는을 찾고 사람이 있는지 여부를 확인하기 위해 isEqual: 메시지를 보낼 것입니다. 따라서, 당신은 indexOfObject:을 사용할 수 있습니다 배열에 있지만 동일한 배열을 가진 객체를 찾으려면 배열에 같은 객체가 있는지 확인하십시오.