NSDictionary的密钥顺序是否保证与初始化相同,如果它永远不会改变?

时间:2010-03-22 23:14:33

标签: iphone objective-c cocoa nsdictionary

我遇到了与找到in this question相同的问题。但是,我有一个后续问题。我似乎与原始提问者的情况相同:我有一个带有字典层次结构的plist,用于定义配置屏幕。这些可变,在整个应用程序中保持不变。由于最初的讨论似乎集中在改变字典引起的问题上,我必须要求确认:字典的顺序是否与plist中的字典顺序相同,即它是否被读取(使用initWithContentsOfFile)?如果字典永远不会改变,我可以在这种情况下使用allKeys获取正确的键序列吗?

4 个答案:

答案 0 :(得分:8)

不,密钥不太可能与plist文件的顺序相同。我无法深入了解,但我猜测按键是以任何提供高效查找的方式排序的。 allKeys的文档说明没有定义数组中元素的顺序。

答案 1 :(得分:7)

如果您需要维护订单的NSDictionary,请查看CHDataStructure's CHOrderedDictionary,这正是如此。我一直都在使用它。

答案 2 :(得分:4)

我不会认为密钥会以任何顺序排列,因为allKeys不保证订单。

在内部,NSDictionary uses a hash table

来自allKeys description

  

数组中元素的顺序   没有定义。

如果您想以某种顺序显示值,那么获取密钥,对密钥数组进行排序,然后获取每个密钥的值。

答案 3 :(得分:3)

保证订单没有任何。它甚至不能保证两次迭代字典会以相同的顺序为你提供密钥。