我只是想知道在一维数组上使用一维散列(即只有键,没有值 – 我们不关心它们)的效率.
我想为此目的使用哈希的主要原因是我可以使用exists函数来查看“条目”是否已经存在.哈希也非常适合不重复密钥吗?对于数组,我需要设置我自己的涉及grep的检查,我认为这会更慢.
然后,对于某些操作,将遍历该散列/数组.
我很想听到有关这方面的任何见解,并提前感谢!
解决方法
exists $hash{ $key }
是一个很好的,简短的表达,清晰易用.明显
!!grep { $_ eq $key } @array
不是很短,但是
$key ~~ @array # smart match
甚至更短.所以从5.10开始,它就像在语法上一样容易测试智能匹配.
因此,根据数组和散列之间的性能差异进行猜测,我可以想象智能匹配对于一小部分项目执行速度会更快,但散列将远远超过具有大量项目的数组查找.
这就是原因.在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% --
我会使用哈希.