对象的NSMutableDictionary

问题描述:

安排是我的字典及其价值观对象的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

的NSDictionary不是指数的基础集合这是一个Hashtable,像所有的HashTable,元素根据一些哈希你不知道的一些逻辑基础是商店。如果您查看NSDictionary的文档,您会发现一个句子,表明对该条目将被检索的顺序没有担保。
如果你想要以特定的顺序检索你的密钥,你需要按照你想要的顺序将你的密钥保存在一个NSArray中。


或者您可以在需要时对您的钥匙进行分类。

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

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

但不像的NSArray或NSMutableArray里,这些元素中的NSMutableDictionary订货或NSDictionary中是不确定的,没有人知道,因为它的机制。 我选择了从Mac OS X开发Libary为一个段落:

“内部,一个字典使用一个哈希表来组织它的存储 ,并提供给相应的键的值的快速访问。然而,为字典中所定义的方法的绝缘你从哈希表工作,散列函数,或密钥的散列 值的 复杂性。该方法直接采取键,而不是在它们的 散列形式“。