2011-12-22 3 views
0

0, 1 ... n-1에 n 개의 요소가 포함 된 NSArray이 있습니다. 내 배열 내용을 NSDictionary으로 채 웁니다.NSArray에서 NSDictionary 만들기 (Objective-c 2.0)

특히 사전에는 키 - 값 쌍이 있어야합니다. 여기서 키는 배열의 i 번째 요소의 해시이고 값은 배열의 인덱스입니다.

예를 들어 :

  • ([123 hash], 0)
  • ([199 hash], 2)
  • ([101 hash], 1)

내가 이상 for 루프로 이런 짓을했습니다 array = [123, 101, 199]은 사전 세 가지 키 - 값 쌍을 포함합니다 배열 이 작업을 수행하는보다 간결한 방법은 무엇입니까? 아마도 NSKeyValueCoding에서 온 것입니까?

더 많은 정보 :이처럼 뭔가 생각 해요 : 루프

NSArray *keys = [myArray valueForKey:@"hash"]; 
NSArray *values = [myArray valueForKey:@"index"]; // @"index" needs to change 
NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:values 
                 forKeys:keys]; 
+1

for 루프는 매우 간결합니다. 약간 다른 모양의 버전에 사용할 수있는 몇 가지 구문이 있지만 실제로 동일한 양의 코드에서 동일한 작업을 수행 할 것입니다. –

+0

맞습니다. 루프는 몇 줄 밖에 없습니다. NSKeyValueEncoding에 대해 더 자세히 배우고 싶습니다. – SundayMonday

+0

아, 그러면 다른 질문에서 명시 적으로 물어볼 수 있습니다. KVC (KeyValueCoding)는 여기서하고있는 것과 직각입니다. 이 질문에서 여러분이 이야기하고있는 문제에 대해 루프 (또는 그 사촌 중 하나)가 올바른 방법입니다. –

답변

1

아마 다윗의 for 루프 솔루션과 같은 자신 만 단지가 재미를 사용하고 것, 나는 해결책이 blocks를 사용하여 내놓았다 :

NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithCapacity:[array count]]; 

[array enumerateObjectsUsingBlock:^ (id obj, NSUInteger idx, BOOL *stop) { 
    [dict setObject:[NSNumber numberWithUnsignedLong:idx] forKey:hashFor(obj)]; } ]; 

해시를 생성하는 함수 hashFor이 있다고 가정합니다. 해당 부분을 obj 또는 해시를 생성하기 위해 수행하는 작업으로 대체 할 수 있습니다.

1

A는 인덱스를 필요 특히, 꽤 좋다. 그렇지 않으면 빠른 열거 형을 사용할 수 있습니다.

int i = 0; 
for (object in array) { 
    … [NSNumber numberWithInt: i] … // Add to dict 
    i++; 
} 

이것은 KVC와 관련이 없습니다. 나는 아직도 그들 주위에 완전히 내 머리를 정리하려고 해요 때문에

관련 문제