perl - Tie::IxHash 在 Perl 中是如何实现的?

标签 perl

我最近在 Perl 中遇到了一种情况,即使用保留顺序的哈希会使我的代码更具可读性和更易于使用。经过一番搜索,我发现了 Tie::IxHash CPAN 模块,它完全符合我的要求。不过,在我放弃谨慎并开始使用它之前,我想更好地了解它的工作原理以及我可以从中获得什么样的性能。

据我所知,有序关联数组通常以尝试的形式实现,我以前从未真正使用过,但确实知道它们的性能符合我的预期(我希望做大量的阅读和写作,并且需要始终记住最初插入的顺序键)。我的问题是我不知道这是否是 Tie::IxHash 的制作方式,或者我应该期望从中获得什么样的性能,或者是否有一些更好/更清洁的选择适合我(我真的宁愿不保留单独的数组和哈希来完成我需要的,因为这会产生丑陋的代码和空间效率低下)。我也只是出于好奇而好奇。如果它没有作为 trie 实现,它是如何实现的?我知道我可以涉足源代码,但我希望其他人已经这样做了,而且我猜我不是唯一对答案感兴趣的人。

所以...想法?建议?建议?

最佳答案

一个 Tie::IxHash object 以一种直接的方式实现,使用人们期望的常规 Perl 构建 block 。具体来说,这样的对象是一个包含 4 个元素的祝福数组引用。

  • [0]用于存储用户哈希键的哈希引用。这在模块需要检查 key 是否存在时使用。
  • [1]按顺序存储用户哈希键的数组引用。
  • [2]用于存储值的并行数组引用,也是按顺序排列的。
  • [3]一个整数,用于跟踪两个并行数组中的当前位置。这是迭代所需要的。

  • 关于性能,不错的benchmark通常比投机更有值(value)。我的猜测是删除会带来最大的性能损失,因为保存有序键和值的数组需要调整。

    关于perl - Tie::IxHash 在 Perl 中是如何实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5344512/

    相关文章:

    python - python方法在没有return语句的情况下的行为

    javascript - 在 IEAutomation 中单击按钮时如何让 Javascript 执行?

    perl - 我可以避免引用+取消引用从映射操作返回的哈希吗?

    css - perl XML::LibXML 不是选择器

    perl - SELECT DISTINCT 是否适用于 Perl 的 DBD::CSV?

    perl - 如何以隐藏方式获取字符串

    ruby - 另一个与 "diff.*\n.*\n.*\n.*\n.*\n "相同的正则表达式

    perl - 如何验证 "yyyy-MM-dd' T'HH :mm:ssZ"date/timestamp in UTC with Perl?

    linux - 在 Bash 中从另一个较大文件中查找文件行的最快方法

    perl - 如何使用 perldoc 查找 %ENV 变量?