2014-11-25 5 views
-1

나는 NSMutableDictionary이 같은 구조, stuff라고 있습니다 다중 레벨 사전에서 값을 설정/가져 오는 방법은 무엇입니까?

{ 
    "ThingStats" : { "Thing1" : { "stat1" : 12, 
            "stat2" : 21 } , 
        "Thing2" : { "stat1" : 4, 
            "stat2" : 15 } 
       } , 

    "OtherStuff" : {...} 
} 

ThingStats뿐만 아니라 그것이 첫 번째 수준에서 다른 사전을 가질 수 있습니다.

stat1 = stuff[@"ThingStats"][@"Thing1"][@"stat1"]; 

과 같이 설정하십시오 :

사용하여이 같은 Thing1'sstat1를 쉽게 얻을 첨자

stuff[@"ThingStats"][@"Thing1"][@"stat1"] = @13; 

이 모든 작품 큰 키가 존재하는 경우.

첫 번째 질문 다음 ThingStats 사전 아직 stuff에 존재하지 않는 경우, ThingStats은 첫 번째 항목 시작의 구조를 얻을 수있는 가장 좋은 방법은 무엇입니까? 예를 들어 stat1stat2의 값이 Thing1 인 경우 stuff 사전에서 아래 표시된 stuff 사전으로 끝나는 가장 쉬운 방법은 무엇입니까? stuff이 0이 아닐 것이라고 가정합니다.

{ "ThingStats" : { "Thing1" : { "stat1" : 12, "stat2" : 21 } } } 

두 번째 질문 : 나중에,이 구조가 결국 그 값을 추가하는 가장 좋은 방법이 무엇인지 Thing2에 대한 stat1stat2 값을 얻을 때 :

{ 
    "ThingStats" : { "Thing1" : { "stat1" : 12, 
            "stat2" : 21 } , 
        "Thing2" : { "stat1" : 4, 
            "stat2" : 15 } 
        } 
} 

셋째 질문 : : 위의 첨자 기술을 사용하여 stat에 새로운 값을 설정하려면 먼저 키와 같은 값을 가지는 모든 키가 존재하는지 확인해야합니다.

if (stuff[@"ThingStats"][@"Thing1"][@"stat1"]) { 
    stuff[@"ThingStats"][@"Thing1"][@"stat1"] = newValue; 
} else { 
    // add the new stat some other way 
} 
+0

"이걸 추가하는 가장 좋은 방법은 무엇입니까?" – kezi

+0

그것은 단지 객체입니다 - 사전과 배열. 기억해야 할 점은 리터럴 표현식으로 생성 된 사전/배열은 불변이며, 사전/배열을 수정하려면 변경 가능해야한다는 것입니다. –

+0

내가 얻으면'[NSMutableDictionary dictionary]'로 새로운 사전을 만든다. 'myDict [@ "keyValue"] = elementValue;를 사용하여 요소를 추가하십시오. 구조가 완료 될 때까지 계속 그렇게하십시오. –

답변

0

나는 당신을 올바른 길로 생각합니다. 귀하의 질문 3 귀하의 첫 번째 질문에 대한 답변. 첫 번째 질문에 대해서는 다음을 사용할 수 있습니다.

//Setup 
NSMutableDictionary *stuff = [NSMutableDictionary dictionary]; 

if (!stuff[@"ThingStats"]) { 
    stuff[@"ThingStats"] = [NSMutableDictionary dictionary]; 
    stuff[@"ThingStats"][@"Thing1"] = [NSMutableDictionary dictionary]; 
    stuff[@"ThingStats"][@"Thing2"] = [NSMutableDictionary dictionary]; 
} 

//Use 

stuff[@"ThingStats"][@"Thing1"][@"stat1"] = @12; 
stuff[@"ThingStats"][@"Thing1"][@"stat2"] = @21; 
stuff[@"ThingStats"][@"Thing2"][@"stat1"] = @4; 
stuff[@"ThingStats"][@"Thing2"][@"stat2"] = @15; 
+0

Perfect. 고맙습니다. –

관련 문제