【发布时间】:2015-03-21 15:05:51
【问题描述】:
我需要找到 Perl 哈希中所有值的最大值。我不需要密钥,只需要最高值,这样我就可以增加它并返回一个比以前更高的新值。世界上最简单的事情。我从这个答案中得到灵感:https://stackoverflow.com/a/2891180/2740187,并实现了这段代码:
use List::Util qw( reduce min max );
my %gid = ("abc" => 1, "def" => 1);
my $gid_ref = \%gid;
my $max_gid = reduce { $a > $b ? $a : $b } values %$gid_ref || 0;
print "$max_gid\n";
如您所见,哈希仅包含两个 1 作为值。那为什么要打印“2”?至少在我的机器上是这样。
我想我会写
my $max2 = max(values %$gid_ref) || 0;
无论如何要获得最大值,但我真的很想了解这里发生了什么。
【问题讨论】:
-
“我想我可以写
my $max2 = max ...”这就是所谓的“自我记录代码”。max一目了然,而reduce需要额外的一秒钟来解析。当您有多种方法来解决同一个问题时,您通常应该使用最易读的方法。 -
完全同意,我会在我的代码中这样做。我刚刚偶然发现了该解决方案并在不久前使用了它。但是一个人永远不会停止学习......