数组 – Perl中数组’一维’散列的优点

我只是想知道在一维数组上使用一维散列(即只有键,没有值 – 我们不关心它们)的效率.

我想为此目的使用哈希的主要原因是我可以使用exists函数来查看“条目”是否已经存在.哈希也非常适合不重复密钥吗?对于数组,我需要设置我自己的涉及grep的检查,我认为这会更慢.

然后,对于某些操作,将遍历该散列/数组.

我很想听到有关这方面的任何见解,并提前感谢!

exists $hash{ $key }

是一个很好的,简短的表达,清晰易用.明显

!!grep { $_ eq $key } @array

不是很短,但是

$key ~~ @array # smart match

甚至更短.所以从5.10开始,它就像在语法上一样容易测试智能匹配.

因此,根据数组和散列之间的性能差异进行猜测,我可以想象智能匹配对于一小部分项目执行速度会更快,但散列将远远超过具有大量项目的数组查找.

但是,无论如何你应该达到Benchmark的性能.

这就是原因.在Strawberry perl上,即使列表大小为1,散列查找也优于字符串匹配:

array_lookup  577701/s           --         -46%
hash_lookup  1068376/s          85%           --

列表中有2个项目:

array_lookup  464684/s           --         -57%
hash_lookup  1068376/s         130%           --

有20个项目:

array_lookup  181554/s           --         -83%
hash_lookup  1068376/s         488%           --

我会使用哈希.

相关文章
相关标签/搜索