我最近在 Perl 中遇到了一种情况,使用保留顺序的哈希将使我的代码更具可读性和更易于使用。经过一番搜索后,我发现了 Tie::IxHash CPAN 模块,它正是我想要的。在我不顾一切并开始使用它之前,我想更好地了解它的工作原理以及我可以期望它获得什么样的性能。
据我所知,有序关联数组通常被实现为尝试,我以前从未真正使用过它,但确实知道它们的性能符合我的期望(我期望进行大量的阅读和写作,并且需要永远记住顺序键是起初插入)。我的问题是我无法弄清楚 Tie::IxHash 是否是这样制作的,或者我应该期望它具有什么样的性能,或者是否有一些更好/更干净的选择适合我(我真的不想保留单独的数组和哈希来完成我所需要的,因为这会产生丑陋的代码和空间效率低下)。我也只是为了好奇而好奇。如果它不是作为 trie 实现的,那么它是如何实现的呢?我知道我可以深入研究源代码,但我希望其他人已经这样做了,而且我猜我不是唯一对答案感兴趣的人。
那么...想法?建议?建议?
A 领带::IxHash http://search.cpan.org/perldoc?Tie%3a%3aIxHashobject 以一种直接的方式实现,使用人们所期望的常规 Perl 构建块。具体来说,这样的对象是一个包含 4 个元素的受祝福的数组引用。
[0]
用于存储用户哈希密钥的哈希引用。每当模块需要检查密钥是否存在时,都会使用它。
[1]
用于按顺序存储用户哈希键的数组引用。
[2]
用于存储值的并行数组引用,也是按顺序存储的。
[3]
一个整数,用于跟踪两个并行数组中的当前位置。这是迭代所需要的。
就性能而言,不错基准 http://search.cpan.org/perldoc?Benchmark通常比投机更有价值。我的猜测是,最大的性能损失将来自删除,因为保存有序键和值的数组将需要调整。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)