尽管只有2个元素在数组中出现的次数相同,我只得到较小的元素作为输出
我试图从代码中删除排序功能,但它仍返回较小的元素
my(@a) = (undef,11,12,13,14,15,13,13,14,14);
my(%count);
foreach my $value (@a) {
$count{$value}++;
}
$max_value = (sort {$count{$b} <=> $count{$a}} @a)[0];
print "Max value = $max_value, occur $count{$max_value} times\n";
预期结果:最大值= 13 14,出现3次
答案 0 :(得分:2)
max_by from List::UtilsBy将返回在列表上下文中共享最大值的所有值。
use strict;
use warnings;
use List::UtilsBy 'max_by';
my @a = (undef,11,12,13,14,15,13,13,14,14);
my %count;
$count{$_}++ for @a;
my @max_values = max_by { $count{$_} } keys %count;
答案 1 :(得分:1)
您的代码仅采用在排序数据中找到的第一个最大值。您需要继续读取数组元素,直到达到不再最大的元素为止。
但是,由于您可能必须测试所有哈希值,因此对它进行排序没有太大的优势。您可以遍历它并跟踪找到的最大值。
my @a = (undef,11,12,13,14,15,13,13,14,14);
my %count;
$count{$_}++ for @a;
my ($max_count, @max_values);
while ( my ($k,$v) = each %count) {
if ($v > $max_count) {
@max_values = ($k);
$max_count = $v;
}
elsif ($v == $max_count) {
push @max_values, $k;
}
}
my $max_values = join " ", sort @max_values;
print "Max value = $max_values, occur $max_count times\n";
请注意,undef
不是有效的哈希键-它会转换为""
。