2011-09-30 3 views
0

dict (값 자체는 중첩 된 dicts로 구성되어 있음)을 전달하는 메소드가 있고이 dict를 탐색하기 위해 재귀를 사용하고 있고 필요한 정보 만 저장하려고합니다. 두 번째 인수로 메소드에 전달되는 dict.ios - 그룹화를 위해 NSMutableDictionary 사용하기

을 : 나는 두 가지 문제에 직면하고있다

-(NSMutableDictionary*) extractData: (NSDictionary*)complicatedDict intoSimpleDict:(NSMutableDictionary*)simpleDict { 
    // do recursive traversal of complicatedDict and return simpleDict 
} 

: 같은

그래서, (재귀를 지원하기 위해 필요한 몇 가지 선택적 인수를 무시)하는 방법이 보인다. 먼저 메서드를 호출 할 때 처음에는 빈 dict을 전달해야합니다. 빈 NSMutableDictionary를 simpleDict 매개 변수로 전달하도록 초기화하는 방법은 무엇입니까?

b. 나는 simpleDict에 공통 키를 갖는 값들을 그룹화하려고 노력하고있다. (내 가장 친숙한 언어) JS, 나는 그것을 좋아 구현됩니다

if(!simpleDict.hasOwnProperty('some_key')) { 
    simpleDict['some_key'] = []; 
} 
simpleDict['some_key'].push("value"); 

위의 코드는 초기에 DICT의 각 인덱스의 배열, 그리고 그것에 값을 밀어 것입니다. 객관적으로 이것을 어떻게합니까?

+0

재귀 순회를 공유 할 수 있습니까? 어레이와 문자열이 노드이기도합니다. –

답변

2

a. 다음과 같이 빈 변하기 쉬운 사전을 만듭니다.

NSMutableDictionary *empty = [NSMutableDictionary dictionary]; 

b. JS 예제와 동일합니다.

if(![[simpleDict allKeys] containsObject:@"some_key"]) 
    [simpleDict setObject:[NSMutableArray array] forKey:@"some_key"]; 
[[simpleDict objectForKey:@"some_key"] addObject:@"value"]; 
0

a. 여기에 몇 가지 옵션이 있습니다. 당신이 당신의 메서드 본문 대가로 조작 할 수있는 오토 릴리즈 사전 객체를 생성합니다

[myObject extractData:complicatedDict intoSimpleDict:[NSMutableDictionary dictionary]]; 

: 하나를 들어, 당신은 단순히 같은 당신의 메서드를 호출 할 수있다. 그 사전을 지킬 필요가있는 사람은 누구든지 그것을 유지해야한다는 것을 기억하십시오.

다른 방법은 상기 방법 본체 사전을 생성한다 :

-(NSMutableDictionary*) extractData:(NSDictionary*)complicatedDict { 
    NSMutableDictionary *simpleDict = [NSMutableDictionary dictionary]; 
    // do recursive traversal of complicatedDict and return simpleDict 
    return simpleDict; 
} 

B. 그냥 @Joe를 게시하고 이것을위한 좋은 해결책이 있습니다.

관련 문제