문제

내 말은 : nsdictionary의 열쇠와 값의 순서는 nsdictionary를 초기화 할 때 항상 지정된 방식과 동일합니까? 아니면 열쇠의 순서를 정말로 알아야한다면 별도의 nsarray를 더 잘 유지해야합니까?

도움이 되었습니까?

해결책

아니요, 주문이 없습니다. 사전에서 요소를 추가하거나 제거하지 않는 한, 동일한 순서로 유지되지만 요소를 추가하거나 제거하자마자 새 순서가 완전히 다릅니다.

주문하려면 키/값이 필요한 경우 NSARRAY (또는 다른 주문 데이터 구조)를 대신 사용하십시오.

다른 팁

NSDictionary 키 및 값은 주문되지 않습니다. 귀하의 옵션 :

  • 원하는 순서대로 키를 별도의 키를 유지합니다.
  • 위의 래퍼 인 기존 클래스를 작성하거나 찾으십시오.
  • 주문을 위해 API를 추가하는 NSDictionary의 기존 서브 클래스를 작성하거나 찾으십시오.

Matt Gallagher는 제목의 블로그 게시물을 썼습니다 "OrderedDictionary : 코코아 클래스 클러스터 서브 클래싱" 이 문제를 정확히 다루고 샘플 코드로 완료하십시오.

nsdictionary에 따르면 애플의 참조, 기본적으로 해시 테이블 주위의 래퍼입니다. 따라서 아니요, 특정 순서로 보장되지 않습니다.

NSDictionary에 액세스 할 때 키는 동일한 순서로 보장되지 않습니다. 키를 비교할 수있는 경우 (질문이 주어질 수 있다고 가정), 정렬 된 순서로 액세스 해야하는 경우 언제든지 정렬 할 수 있습니다.

키를 먼저 배열로 읽고 배열을 정렬 하여이 작업을 수행해야합니다.

실제로, 정확히 동일한 프로그램이고 정확히 동일한 버전의 운영 체제 일지라도 프로그램을 실행할 때 순서가 동일하게 의존 할 수 없습니다.

예를 들어, iPad Air에서 프로그램을 실행하는 경우 iOS 버전이 정확히 동일하더라도 NSDictionary 내부의 요소 순서는 iPad Retina에서 동일한 프로그램을 실행할 때와 다를 수 있습니다.

요컨대, nsdictionary에서 요소의 순서는 절대로 의존해서는 안됩니다. 당신은 항상 그들이 지정되지 않은 순서라고 가정해야하며, 이는 다른 장치에서 다를 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top