2009-06-19 11 views
6

NSDictionary는 키 - 값 쌍에 적합합니다. 세 값을 가질 때 가장 적합한 데이터 구조는 무엇입니까? 그 3 가지 값에 대한 클래스를 생성 한 다음 배열의 각 객체에 해당 클래스의 인스턴스가 포함되도록하는 것이 가장 좋습니다. NSDictionary가 쌍 값에 좋은 경우 트리플 값에 좋은 점은 무엇입니까?

은 구체적으로 : 데이터 구조,의는 사람을 부르 자, 나는 세 가지 값이 직시 : (있는 NSString) 이름 인 IsAlive (INT) 연령, (BOOL)를

이는 (배열에서 개최 될

?). 이름을 키로 사용하고 숫자가있는 블록 전체를 0부터 시작하는 것이 중요합니다.

+1

이 새로운 구조에는 2 개의 키와 1 개의 값 또는 1 개의 키와 2 개의 값이 있습니까? 아니면 교환 할 수 있습니까? – samoz

+0

나는 당신이 질문을 더 철저히 설명 할 필요가 있다고 생각한다. – U62

+1

예, NSDictionary는 키 - 값 쌍을 저장하지만 그 점은 중요하지 않습니다. 쌍은 대칭 적이 지 않습니다. NSDictionary의 전체 * 점 *은 값이 필요하지 않지만 키는 고유하다는 점을 고려하지 않고 "트리플"로 일반화 할 수 없습니다. 그래서 당신의 "트리플"에서, 세 가지 요소 중 어느 것이 가치와 유사하고 어떤 것이 열쇠와 같은 것입니까? – bendin

답변

9

하나의 키와 두 개의 값이있는 경우 두 값에 대한 클래스를 만들고 사전을 사용하는 것이 좋습니다.

두 개의 키와 하나의 값이있는 경우 중첩 된 사전 (즉, 키가 첫 번째 키이고 값이 다른 사전 인 사전)을 사용하게됩니다. 중첩 된 사전의 키는 두 번째 키이고 값은 실제 값입니다.

ETA : 이제 질문을 명확히 한 것으로

- 당신이 키 또는 정수 인덱스로 두 컬렉션에 액세스해야하는 경우, 당신은 여전히 ​​사전을 사용할 수 있습니다.

키에 의해 항목을 얻으려면, 당신이 할 것 :

[myDict objectForKey:@"joe"]; 

를 인덱스 항목을 얻으려면, 당신은해서 AllKeys 배열을 사용할 수 있습니다

[myDict objectForKey:[[myDict allKeys] objectAtIndex:1]]; 

을하면 얻기위한 유일한 목적 index에 의한 사람들은 전체 컬렉션에 대해 루핑을합니다. keyEnumerator 메소드를 사용하여 루프의 키를 열거하고 키를 사용하여 값을 조회하는 것이 좋습니다.

-1

two dimensional 어레이에 대한 설명이 아닙니까?

+0

각 요소가 3 개의 요소가있는 배열로 연결되는 배열을 생각하고 있습니다. 그러나 2 차원 배열은 키 - 값 쌍을 저장하는 것과는 아무런 관련이 없습니다. 사전에는 "지도", "연관 배열", "해시"등과 같은 사전이 필요합니다. 특히 NSDictionary 1 키 대 1 값의 쌍을 지원합니다. 그는 1 키 대 3 값을 찾고 있습니다. –

0

일종의 일반화 된 데이터 구조를 만들지 여부에 달려 있습니다. '세 가지'가 앱 내의 특정 개념 인 경우 domain model으로 향하고있을 수 있습니다.이 경우 클래스에 이러한 값을 캡슐화하는 것이 좋습니다.

[NSDictionary objectForKey :] 등의 사전 기능이 필요한 경우 키 값을 클래스 인스턴스에 매핑하는 인덱스로 하나 이상의 사전을 계속 사용할 수 있습니다.

1

관계형 데이터베이스 모델을 사용하여 핵심 데이터를 사용하여보다 복잡한 데이터 관계를 나타낼 수 있습니다.

예제 및 설명서는 Apple 개발자 사이트를 확인하십시오.

0

CoreData (저장하는 경우)를보고 개체에 대한 클래스를 정의해야합니다. NSDictionary와 같은 네이티브 제네릭 객체는 Person과 같은 복잡한 객체를 구성하는 복잡한 값을 저장하기위한 것이 아닙니다.

Person *person = [[Person alloc] init]; 
person.firstName = @"blah"; 
person.age = 24; 
person.isAlive = YES; 
1

처음에는 관련이없는 것처럼 보일 수 있지만,이 Introduction to Cocoa Bindings에서 사전 중심의 구조를 확인하십시오. (CocoaDevCentral과 Scott Stevenson은 새로운 코코아 개발자를위한 훌륭한 자료입니다.) 그가 사용하는 접근 방법은 매우 유연하고 쉽게 변경할 수 있습니다.ivars 대신 사전을 사용하는 것이 항상 최선의 해결책은 아니지만 필요에 따라 적합 할 수 있습니다.

참고 : 코아 데이터와 마찬가지로 코코아 바인딩도 매우 복잡한 주제입니다. 나는 자습서의 조직적 측면만을 사용하고 바인딩을 사용하지는 않을 것입니다. :-)