2014-05-14 57 views
0

我有一個NSMutableDictionary有如下的結構:NSMutableDictionary keyEnumerator或NSArray?

Main Dictionary > Unknown Dictionary > Dictionaries 1,2,4,5,6...

我的問題是什麼是檢索未知詞典按鍵,並將其設置爲可變的最佳方式?這是我已經試過:

NSEnumerator *enumerator = [myMutableDict keyEnumerator]; 
id aKey = nil; 
while ((aKey = [enumerator nextObject]) != nil) { 
    id value = [myMutableDict objectForKey:aKey]; // changed to `aKey` 
    NSLog(@"%@: %@", aKey, value);    // tip via rmaddy 
} 

什麼進入objectForKey:如果你不知道在關鍵的對象的名稱?

另一個想法是填充NSArray,然後以某種方式拉出每個鍵。

for (NSString *object in myMutableDict) 
     myArray = [myArray arrayByAddingObject:MainDict]; 
} 

如果任何人都可以提出一個更好的方式來獲得一個NSMutableDictionary我感興趣的學習對象(未知)。

+0

您的for循環正常工作,可讓您遍歷'myMutableDict'中的所有鍵。你在問什麼問題? – mah

+0

@mah,只是想知道最好和最有效的方法。另外我不確定keyEnumerator是如何工作的。我在我感到困惑的代碼中發表評論。 – ctfd

+0

'whileFor'循環內'objectForKey:'的調用應該是'[myMuyableDict objectForKey:aKey]'。 – rmaddy

回答

1

您可以枚舉字典是這樣的:

NSDictionary * someDictionary = ... however you set your dictionary; 
[someDictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { 
    NSLog(@"Key: %@", key); 
    NSLog(@"Object: %@", obj); 


}]; 

,並設置:

*stop = YES; 

當你找到你要找的對象。

+0

塊是否比舊式語法更高效,並且在使用塊(ARC特定等)時是否存在任何警告?謝謝! – ctfd

+0

我不知道他們是否更有效率。注意事項 - 您可能需要更清楚自己如何分配內容。這主要與後臺線程相關,或者當視圖控制器在被所述視圖控制器保留的塊中被引用時。使用這樣的塊確實不應該導致任何問題。如果你想使用局部變量,你將不得不放置一個'__block'說明符。在個人筆記中,我絕對喜歡塊。它們非常有用! – Logan

+0

我個人更喜歡這個解決方案,因爲它直接獲得了我所有的對象和按鍵,所以它爲我節省了一兩步。 – Logan

0

我不完全確定我是否正確理解你的問題。我假設你有一個「主」字典,其中只有一個(未知)鍵映射到你想要檢索的另一個字典。這將是一個簡潔明瞭的方式來做到這一點:

NSDictionary *unknownDictionary = mainDictionary[mainDictionary.allKeys.firstObject]; 

(是的,有些人會不喜歡這裏的點語法,但我覺得它更容易在這種情況下閱讀您可能還需要添加。一些錯誤檢查,對於mainDictionary爲空的情況等)

+0

謝謝你的例子。你是對的 - 我只是想找到從我的字典中獲得未知值的最佳方式。由於未知的選擇器,我將'lastPathComponent'的值與'lastPath'的值進行比較時遇到了一些問題。我希望通過事先了解鑰匙,我可以避免這些問題。 – ctfd

相關問題