2009-11-28 4 views
18

이렇게 어리석은 질문이긴하지만 NSArray에서 문자열을 어떻게 찾을 수 있습니까? NSArray에서 문자열을 찾는 방법은 무엇입니까?

나는

[array indexOfObjectIdenticalTo:myString] 

를 사용하여 시도하지만 같은 주소를 갖도록 고통을 필요로한다.

아무에게도이 작업을 수행하는 방법에 대한 정보가 있습니까?

답변

13

피터의 대답은 정확합니다.

추가 메모 1 개; 배열에 톤과 톤이 있다면, -indexOfObject:은 선형 검색을 할 것입니다. 이것은 다른 컨테이너를 사용하는 것을 고려해야하는 성능 병목 현상이 될 수 있습니다. NSSet 또는 NSDictionary, 아마도 (문자열의 의미에 따라).

문자열이 모두 비교적 유사하거나 비교적 길다는 또 다른 문제가 있습니다.

물론 성능 문제가 있음을 입증하기 위해 분석 도구를 사용할 때까지는 최적화를 신경 쓰지 마십시오.

당신은 컨테이너로 NSOrderSet을 사용할 수 있습니다
4

, NSOrderedSet 클래스 참조에있는 동안보기는 다음과 같습니다 :

NSOrderedSet과 서브 클래스, NSMutableOrderedSet, 오브젝트의 정렬 된 컬렉션에 프로그래밍 인터페이스를 선언합니다.

NSOrderedSet은 다른 개체의 정적 집합에 대한 프로그래밍 인터페이스를 선언합니다. 정적 집합의 항목이 만들어 질 때 그 항목을 설정하면 항목을 수정할 수 없습니다. 반면에 NSMutableOrderedSet은 동적 인 별개의 객체 집합에 대한 프로그래밍 인터페이스를 선언합니다. 동적 또는 변경 가능한 세트는 언제든지 항목의 추가 및 삭제를 허용하여 필요에 따라 자동으로 메모리를 할당합니다.

요소의 순서가 중요하고 배열에 개체가 포함되어 있는지 여부를 테스트 할 때 고려해야 할 사항> 배열 멤버십에 대한 테스트가 테스트보다 느린 경우 정렬 된 집합을 배열 대신 사용할 수 있습니다. 집합의 멤버십.

구경 http://developer.apple.com/library/mac/#documentation/Foundation/Reference/NSOrderedSet_Class/Reference/Reference.html

1

containsObject :

주어진 객체는 어레이 내에 존재하는지 여부를 나타내는 부울 값을 반환.

  • (BOOL) containsObject (ID) anObject를 매개 변수 anObject를 하는 객체입니다.

반환 값 anObject를 NO는 달리, 어레이에있는 경우 YES.어레이의 각 객체에 메시지 (각 ISEQUAL에 파라미터로서 anObject를 통과 : 메시지)

토론

이 방법 anObject를가 ISEQUAL 전송함으로써 배열의 존재 여부를 판정한다.

는 NSArray.h

에서 선언

관련 문제