这是我的字典及其值
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 ,但我似乎从我之前设置的最后一个键开始!
有谁能告诉我为什么?以及如何按照我的解释来达到我的期望?
答案 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中的一个段落:
“在内部,字典使用哈希表来组织其存储 并提供给定相应密钥的快速访问值。 但是,为字典定义的方法将您隔离开来 使用哈希表,散列函数或者哈希表的复杂性 密钥的哈希值。这些方法直接使用密钥,而不是密码 哈希形式。“