是否订购了NSDictionary中的键和值?

时间:2009-08-18 17:48:02

标签: iphone cocoa-touch uikit nsdictionary

我的意思是:NSDictionary中的键和值的顺序是否始终与初始化NSDictionary时的指定顺序相同?或者,如果我真的需要知道键的顺序,我应该更好地保持单独的NSArray吗?

6 个答案:

答案 0 :(得分:18)

不,他们没有订购。只要您不添加或删除字典中的任何元素,它们将保持相同的顺序,但只要添加或删除元素,新订单就会完全不同。

如果您需要订购键/值,请使用NSArray(或其他一些有序数据结构)。

答案 1 :(得分:3)

NSDictionary键&值未订购。你的选择:

  • 按照您想要的顺序维护一个单独的键阵列
  • 编写或查找作为上述
  • 包装器的现有类
  • 编写或查找NSDictionary的现有子类,其中添加了用于订购的API

答案 2 :(得分:3)

Matt Gallagher撰写了一篇名为“OrderedDictionary: Subclassing a Cocoa class cluster”的博客文章,内容正是这个问题,并附有示例代码。

答案 3 :(得分:1)

访问NSDictionary时,

密钥永远不会保证是相同的顺序。如果可以比较密钥(我假设它们可以给出您的问题),那么如果您需要按排序顺序访问密钥,则可以随时对它们进行排序。

您需要先将数据键读入数组,然后对数组进行排序。

答案 4 :(得分:1)

根据Apple's reference,NSDictionary基本上是哈希表的包装器。所以不,他们不能保证任何特定的顺序。

答案 5 :(得分:1)

事实上,即使它是完全相同的程序和完全相同的操作系统版本,在两个不同的设备上运行程序时,您甚至不能依赖于相同的顺序。

例如,如果您在iPad Air上运行程序,NSDictionary内部元素的排序可能与在iPad Retina上运行相同程序时的顺序不同,即使iOS版本完全相同。

简而言之,绝不能依赖NSDictionary中元素的顺序。您必须始终假设它们可能处于任何未指定的顺序,在不同的设备上可能会有所不同。