2012-01-03 76 views
0

安排是我的字典及其價值觀對象的NSMutableDictionary

NSMutableDictionary *myDic=[NSMutableDictionary Dictionary]; 
[myDIC setObject:@""]; 

[myDIC setObject:string1 forKey:key1]; 
[myDIC setObject:string2 forKey:key2]; 
[myDIC setObject:string3 forKey:key3]; 

所以到這裏我已經填補了我的dictionary.now我想通過閱讀這些for循環。

for (NSString *key in myDic){ 


} 

這是我的問題!在這個循環內我的第一把鑰匙將是key1但我似乎從我設定的最後一把鑰匙開始!

有任何人誰可以告訴我爲什麼?以及我如何滿足我的期望,就像我解釋的一樣?

+0

沒有保證第一個或最後一個項目將是你得到的一個。即使您嘗試使用NSEnumeration,也適用相同的行爲。 – 2012-01-03 06:46:13

回答

2

的NSDictionary不是指數的基礎集合這是一個Hashtable,像所有的HashTable,元素根據一些哈希你不知道的一些邏輯基礎是商店。如果您查看NSDictionary的文檔,您會發現一個句子,表明對該條目將被檢索的順序沒有擔保。
如果你想要以特定的順序檢索你的密鑰,你需要按照你想要的順序將你的密鑰保存在一個NSArray中。


或者您可以在需要時對您的鑰匙進行分類。

NSArray * allKeys = [myDict allKeys]; 
allKeys = [allKeys sortedArrayUsing// [see the documentation for all options][1] ]; 
1

我以前遇到過這個問題。 NSMutableArray的NSArray中特定元素的順序由其索引決定。

但不像的NSArray或NSMutableArray裏,這些元素中的NSMutableDictionary訂貨或NSDictionary中是不確定的,沒有人知道,因爲它的機制。 我選擇了從Mac OS X開發Libary爲一個段落:

「內部,一個字典使用一個哈希表來組織它的存儲 ,並提供給相應的鍵的值的快速訪問。然而,爲字典中所定義的方法的絕緣你從哈希表工作,散列函數,或密鑰的散列 值的 複雜性。該方法直接採取鍵,而不是在它們的 散列形式「。

相關問題