首页 > 解决方案 > 如何从 Perl 中的哈希中获取最小值键

问题描述

我有能够从哈希值中选择最小值的脚本。

use strict;
use warnings;

use Data::Dumper;
use List::Util qw(min);

my @array = qw/50 51 52 53 54/;

my $time = 1596561300;

my %hash;

foreach my $element(@array){  
    $hash{$time} = $element;
    $time += 6; #based on some condition incrementing the time to 6s
}

print Dumper(\%hash);

my $min = min values %hash; 
print "min:$min\n";

在这里,我可以从50哈希值中的所有值中获取最小值。但是我如何获得与最小值对应的哈希键,即1596561300.

标签: perlhashminimum

解决方案


从键中,您可以获得值。因此,您需要具有最小关联值的键。

min LIST可以写成reduce { $a <= $b ? $a : $b } LIST,所以我们可以使用

use List::Util qw( reduce );

my $key = reduce { $hash{$a} <= $hash{$b} ? $a : $b } keys %hash;
my $val = $hash{$key};

或者

my ($key) = keys(%hash);
my $val = $hash{$key};
for (keys(%hash)) {
   if ($hash{$_} < $val) {
      $key = $_;
      $val = $hash{$val};
   }
}

推荐阅读