查找哈希的最小值和最大值



我有一个散列,它将字符串存储为键,将它们的出现次数存储为值。

$VAR1 = {
'ABCD' => 2,
'EFGH' => 7,
'IJKL' => 17,
'MNOP' => 2,
'OPMN' => 300,
'QRST' => 300,
'DEAC' => 300
}

我想找到这个哈希值的最小值和最大值。如min = 2, max = 300

我尝试以下代码给出错误Can't use string ("17") as an ARRAY ref while "strict refs" in use at

$minAssigned = min(@{$countPat{$pat4C}});
$maxAssigned = max(@{$countPat{$pat4C}});

如何解决这个错误?此外,一旦我有了这些数字,我想循环遍历相同哈希值minAssigned到maxAssigned的次数,并打印值的总出现次数。例如,值2出现2次,值17出现1次,值300出现3次。

使用values获取哈希值列表

#!/usr/bin/perl
use warnings;
use strict;
use List::Util qw{ min max };
my $h = {
'ABCD' => 2,
'EFGH' => 7,
'IJKL' => 17,
'MNOP' => 2,
'OPMN' => 300,
'QRST' => 300,
'DEAC' => 300
};
print min(values %$h), "n";
print max(values %$h), "n";

使用另一个散列来计算频率:

my %freq;
++$freq{$_} for values %$h;
for my $k (keys %freq) {
print "$k occurs $freq{$k} times.n";
}

在时间临界循环中,对于大量的值,可以从List::MoreUtils(或List::SomeUtils或List::AllUtils)切换到minmax

my ($min, $max) = minmax(values %$h);

最新更新