2011-09-30 45 views
0

我有一個傳遞字典(其值本身由嵌套字典組成)的方法,並且我使用遞歸來遍歷此字典,並且我只想存儲我需要的信息dict也作爲第二個參數傳遞給方法。iOS - 使用NSMutableDictionary進行分組

所以,方法(忽略對幫助遞歸需要一些可選參數)的樣子:

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

我面臨兩個問題:

一個。當我第一次調用該方法時,我需要傳遞一個空字典。我如何初始化一個空的NSMutableDictionary作爲simpleDict參數傳遞?

b。我正在嘗試將simpleDict中具有共同鍵的值分組。在JS(這是我的最熟悉的語言),我會實現它喜歡:

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

上述代碼最初將在字典中的每個索引的陣列,和推值到它。我如何在objective-c中做到這一點?

+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]]; 

這將創建一個自動釋放Dictionary對象,你可以在你的方法體和返回操作。只要記住,誰需要保留該字典應保留它。

另一種方法是隻創建字典的方法體:

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

灣剛剛看到@Joe發佈,併爲此提供了一個很好的解決方案。