perl – 为什么减少{}没有按预期返回最大值?
发布时间:2020-12-15 23:24:25 所属栏目:大数据 来源:网络整理
导读:我需要在Perl哈希中找到所有值的最大值.我不需要键,只需要最高值,这样我就可以增加它并返回一个比以前更高的新值.世界上最简单的事情.我从这个答案中获取灵感: https://stackoverflow.com/a/2891180/2740187,并实现了这段代码: use List::Util qw( reduce
我需要在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_gidn"; 如您所见,哈希只包含两个1作为值.那为什么打印“2”?至少它在我的机器上. 我想我只能写 my $max2 = max(values %$gid_ref) || 0; 无论如何要获得最大值,但我真的想了解这里发生了什么. 解决方法
这条线
my $max_gid = reduce { $a > $b ? $a : $b } values %$gid_ref || 0; 被解析为 my $max_gid = reduce { $a > $b ? $a : $b } (values %$gid_ref || 0); 和 (values %$gid_ref || 0) 在标量上下文中使用值,该值计算哈希值(2)中的元素数量.自2 || 0仍然是2,你在标量上执行缩减并返回值. 另一方面 my $max_gid = (reduce { $a > $b ? $a : $b } values %$gid_ref) || 0; 确实按预期获得序列的最大值. 什么是||的目的0无论如何?文档建议
所以你可能想要 my $max_gid = reduce { $a > $b ? $a : $b } 0,values %$gid_ref; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |