3

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

4

3 回答 3

11

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

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

于 2013-04-10T05:42:20.933 回答
5

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

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

于 2013-04-10T05:41:33.303 回答
0

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

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

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

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

于 2013-04-10T12:18:26.183 回答