Perl - 标识散列中具有最高值的所有元素

Sla*_*ron 1 arrays perl hash

我写了一些Perl代码,用于搜索哈希中的最高键值对,其中键是文本,值是数字:

my $o_val = 0;    # FOR TRACKING HIGHEST VALUE ENCOUNTERED IN THE LOOP
my $o_key;        # FOR TRACKING CORRESPONDING KEY TO THE HIGHEST VALUE
while ( my ($key, $val) = each(%NG) ) {
        if ( $val > $o_val ) {
                $o_val = $val;
                $o_key = $key;
        }
}
print "$okey\n";
Run Code Online (Sandbox Code Playgroud)

问题在于它没有考虑到最高价值并列的可能性.如果我的测量变量可能随着循环的每次迭代而发生变化,那么如何捕获所有与最高值相关的键值对?

我有一个想法,我可以编写另一个while循环来运行相同的哈希值,然后将$ o_val建立为最高值,然后将每个键配对到$ o_val推入另一个数组,例如:

my @highest;     # ARRAY OF HIGHEST-VALUE KEYS
while ( my ($key, $val) = each(%NG) ) {
    if ( $val == $o_val ) { push(@highest, $key); }
}
Run Code Online (Sandbox Code Playgroud)

但这似乎有点低效.我希望有一些我不知道的Perl命令会让我在没有循环的情况下识别散列中的最高值,所以我可以在我的问题中使用第二段代码.

Сух*_*й27 5

您可以使用数组来保持键的最高价值,

if ( $val > $o_val ) {
  $o_val  = $val;
  @o_keys = $key;
}
elsif ($val == $o_val) {
  push(@o_keys, $key);
}
Run Code Online (Sandbox Code Playgroud)