什么是NSSet的迭代顺序?

时间:2011-11-16 22:39:49

标签: objective-c ios iteration nsset

我知道NSSet不保留顺序,我对如何在iOS4 / iOS5 sdks中实现迭代顺序感到好奇。你有什么想法吗?

1 个答案:

答案 0 :(得分:2)

简答: 订单是随机的。

长答案: 根据定义,未指定订单。换句话说,它取决于实施。 在通常的实现中,每个对象都被转换为整数(哈希码),用于快速查找集合中的对象(索引哈希表),然后通过哈希码实现迭代顺序(哈希码基本上是一个数组)索引)。

请注意,如果两个对象具有相同的哈希码(但它们不相等),则它们的顺序仅取决于该集上的插入/删除操作的顺序。

由于常见的哈希表实现对不同的数据大小使用不同的哈希函数,因此当设置大小增加时,顺序可以完全改变。