13

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

4

6 回答 6

19

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

如果您需要对键/值进行排序,请改用 NSArray(或其他一些有序数据结构)。

于 2009-08-18T17:50:01.480 回答
3

NSDictionary 键和值没有排序。您的选择:

  • 按照您想要的顺序维护一个单独的键数组
  • 编写或查找作为上述包装器的现有类
  • 编写或查找现有的 NSDictionary 子类,它添加了用于排序的 API
于 2009-08-19T11:24:27.407 回答
3
于 2013-01-17T07:10:59.433 回答
1

访问 NSDictionary 时,永远不能保证键的顺序相同。如果可以比较键(我假设它们可以给出你的问题),那么如果你需要按排序顺序访问它们,你总是可以对它们进行排序。

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

于 2009-08-18T17:52:10.180 回答
1

根据Apple 的参考资料,NSDictionary 基本上是一个散列表的包装器。所以不,不能保证它们按任何特定顺序排列。

于 2009-08-18T17:55:24.683 回答
1

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

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

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

于 2017-03-08T11:16:03.437 回答