对象在NSMutableDictionary中排列

时间:2012-01-03 06:22:49

标签: objective-c nsmutabledictionary

这是我的字典及其值

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

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

所以到这里我已经填满了我的字典。现在我想通过for循环阅读它们。

for (NSString *key in myDic ){


}

这是我的问题!在这个循环中,我的第一个键将是 key1 ,但我似乎从我之前设置的最后一个键开始!

有谁能告诉我为什么?以及如何按照我的解释来达到我的期望?

2 个答案:

答案 0 :(得分:2)

NSDictionary不是一个索引库集合,它是一个Hashtable,和所有HashTable一样,这些元素是根据你不知道的一些Hash的逻辑存储的。如果你查看NSDictionary的文档,你会发现一个句子,说明没有关于该项目将被检索的订单的保证。
如果您希望按特定顺序检索密钥,则需要按照所需的顺序将密钥保存在NSArray中。


或者您可以在需要时对键进行排序。

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

答案 1 :(得分:1)

之前我遇到过这个问题。 NSMutableArray的NSArray中特定元素的顺序由其索引决定。

但与NSArray或NSMutableArray不同,NSMutableDictionary或NSDictionary中的元素顺序是未定义的,没有人知道因为它的机制。 我为您选择了Mac OS X Developer Libary中的一个段落:

  

“在内部,字典使用哈希表来组织其存储   并提供给定相应密钥的快速访问值。   但是,为字典定义的方法将您隔离开来   使用哈希表,散列函数或者哈希表的复杂性   密钥的哈希值。这些方法直接使用密钥,而不是密码   哈希形式。“