【问题标题】:Why can’t the keys of a Perl hash be retrieved in the order in which they were stored?为什么不能按照存储顺序检索 Perl 哈希的键?
【发布时间】:2015-12-17 01:10:03
【问题描述】:

我在 Perl 中声明了一个哈希,后来我按一定的顺序添加了几个键值对。当我迭代哈希时,键值对与它们的存储顺序不同。是什么原因?

【问题讨论】:

标签: perl


【解决方案1】:

因为散列使数据保持由散列函数控制的顺序。好的散列函数将键映射成看起来几乎是随机的散列值。

如果你想在 Perl 中排序哈希,你可以使用 Tie::Hash::IndexedTie::IxHash

【讨论】:

    【解决方案2】:

    哈希图通常不保留任何语言的顺序。

    您可以在迭代之前对键进行排序以获得排序顺序,或者如果您确实需要原始插入顺序,则可以将其单独保存在单独的数组中。

    【讨论】:

      【解决方案3】:

      原因哈希不保持顺序是因为它们存储在称为hash table 的特殊结构中。

      当您访问$hash{key} 时,在后台key 将转换为标识该值位置的索引。这允许近乎即时地访问散列的内容,即使您的散列具有大量元素。

      相比之下,如果哈希存储在保留插入顺序的结构(例如传统数组)中,则需要进行大量查找才能找到给定元素。如果您有一个包含一百万个元素的数组,则查找特定元素平均需要 500,000 次操作。

      如果插入顺序是您需要访问数据的主要方式,那么使用传统数组可能会更好。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-26
        • 2022-01-19
        • 2015-08-01
        • 2023-04-07
        • 2011-01-01
        • 2013-05-19
        • 1970-01-01
        • 2010-10-20
        相关资源
        最近更新 更多