为什么不能按照存储它们的顺序检索Perl哈希的键?

时间:2013-04-10 05:35:00

标签: perl

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

3 个答案:

答案 0 :(得分:11)

因为哈希保持数据的顺序由哈希函数控制。好的哈希函数将键映射到几乎随机的哈希值。

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

答案 1 :(得分:5)

哈希映射通常不会保留任何语言的顺序。

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

答案 2 :(得分:0)

原因哈希值不保留顺序,因为它们存储在名为hash table的特殊结构中。

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

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

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