NSDictionary allKeys - 它总是返回相同的顺序吗?

时间:2012-03-05 22:58:56

标签: iphone objective-c xcode cocoa-touch nsdictionary

我是Objective-C的新手,今天我正在使用NSDictionaries并遇到了allKeys方法。据我所知,它以随机顺序返回包含字典键的NSArray。但是,这个订单总是一样吗?也就是说,如果我连续20次在同一个字典上调用allKeys,我保证得到相同的结果顺序?

谢谢,

3 个答案:

答案 0 :(得分:8)

如果您在字段上连续20次调用该方法( ),很可能将返回相同的订单。也就是说,我强烈反对你不依赖于此,因为它高度依赖于实现细节。我说它最有可能返回相同顺序的唯一原因是因为访问字典不应该改变任何内部结构,并且在没有变异的情况下,唯一的另一种方法可以获得不同的顺序命令是明确地引入非确定性,即依赖于全局状态,例如随机数生成器或CPU的时钟,我发现NSDictionary执行任何此操作都非常值得怀疑。

如果你需要确保键的顺序相同,你可能只需要从词典中获取它们就可以对它们进行排序。

答案 1 :(得分:1)

NSDictionary对象是无序的,以保持性能。

如果您需要有序字典,请查看此项目:

http://code.google.com/p/cocoa-sorted-dictionary/

答案 2 :(得分:0)

解决这个问题的方法是编写一个快速测试程序。实际上,你不应该依赖这样的非保证,未记录的结果。这是一个糟糕的编程实践,很可能会破坏新的操作系统版本。

如果您需要按特定顺序返回的密钥,则应在检索后对其进行排序。您可以使用-[NSArray sortedArrayUsing...]方法组执行此操作。