NSSet的迭代顺序是怎样的?

发布于 2024-12-16 13:09:52 字数 63 浏览 2 评论 0原文

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

I know that NSSet does not preserve order and I got curious about how the iteration order is implemented in iOS4/iOS5 sdks. Do you have any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

总攻大人 2024-12-23 13:09:53

简短回答:
顺序是随机的。

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

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

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

Short Answer:
The order is random.

Long Answer:
By definition, the order is not specified. In other words, it depends on the implementation.
In common implementations, every object is converted to an integer number (hash code) which is used to find the object in the set quickly (indexing hash table) and the iteration order is then implemented by hash codes (a hash code is basically an array index).

Note that if two objects have the same hash code (but they are not equal), their order depends only on the sequence of insert/delete operations on the set.

Since common hash table implementations use different hash functions for different data sizes, the order can change completely when set size is increased.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文