我最近遇到了一个Perl的情况,使用保留顺序的哈希会使我的代码更易读,更容易使用。经过一番搜索,我发现了Tie :: IxHash CPAN模块,它完全符合我的要求。在我谨慎起见并开始使用它之前,我想更好地了解它是如何工作的以及我可以从中获得什么样的性能。
据我所知,有序关联数组通常被实现为尝试,我以前从未实际使用过,但确实知道它们的性能符合我的期望(我希望能够进行大量的阅读和写作,并且需要始终记住最初插入的订单键。我的问题是我无法弄清楚这是否是Tie :: IxHash的制作方式,或者我应该从中获得什么样的性能,或者对我来说是否有一些更好/更清洁的选择(我真的不想保留一个单独的数组和哈希来完成我需要的东西,因为这会产生丑陋的代码和空间效率低下)。我也只是因为好奇心而好奇。如果它没有被实现为trie,它是如何实现的?我知道我可以涉及源代码,但我希望其他人已经这样做了,我猜我不是唯一对答案感兴趣的人。
所以......想法?建议?建议?
答案 0 :(得分:9)
使用人们期望的常规Perl构建块以直接方式实现Tie::IxHash对象。具体来说,这样的对象是一个包含4个元素的祝福数组引用。
[0]
用于存储用户哈希键的哈希引用。只要模块需要检查密钥是否存在,就会使用它。
[1]
一个数组引用,用于按顺序存储用户哈希的键。
[2]
用于存储值的并行数组引用,也按顺序排列。
[3]
一个整数,用于跟踪两个并行数组中的当前位置。这是迭代所必需的。
关于表现,良好的benchmark通常比猜测更有价值。我的猜测是,最大的性能损失将伴随删除,因为持有有序键和值的数组将需要调整。
答案 1 :(得分:1)
source将告诉您如何实施此功能并衡量其性能。