在Perl中,如何打印与散列中的最大值对应的键?

时间:2011-11-17 09:26:53

标签: perl hash

如何只打印哈希的第一个键和元素?

我已经有一个已排序的哈希,但我想只打印第一个键和相应的值 感谢,

感谢大家最后我将键和值推送到两个不同的@array和每个数组的打印元素0并且它可以工作:)

5 个答案:

答案 0 :(得分:8)

哈希有无序键。因此,散列中没有第一个键这样的键。

但是,如果您需要首先排序的密钥(最大密钥值):

my %hash = (
    'foo' => 'bar',
    'qux' => 'baz',
);

my ($key) = sort { $b cmp $a } keys %hash;
print "$key => $hash{$key}";  # Outputs: qux => baz

请务必使用<=>代替cmp进行数字排序。

答案 1 :(得分:5)

在perl哈希中没有键的排序。使用sort函数以您想要的顺序获取键,或者您可以在创建哈希时将键推入数组,并且第一个键将位于数组中的第零个索引

你可以使用下面的代码,我假设哈希名称是my_hash,键和值是数字。如果您有字符串,则可以使用cmp代替<=>。有关更多详细信息,请参阅排序文档

获取最大密钥

foreach (sort {$b <=> $a} keys %my_hash) {
    print "Keys is $_\n";
    print "Value is $my_hash{$_}\n";
    last;
}

获取与最大值对应的键

foreach (sort {$my_hash{$b} <=> $my_hash{$a}} keys %my_hash) {
    print "Keys is $_\n";
    print "Value is $my_hash{$_}\n";
    last;
}

答案 2 :(得分:0)

就像艾伦写的那样 - 哈希没有特定的顺序,但你可以对哈希键进行排序:

foreach my $key (sort keys(%hash)) {
   print $key . ': ' . $hash{$key} . "\n";
}

或者,如你所愿,从keys数组中获取第一个元素:

my @keys = keys(%hash);
print $keys[0];

答案 3 :(得分:0)

foreach my $key (sort keys(%hash)) { 
   print "$key" .  "$hash{$key}" . "\n"; 
   last;
} 

答案 4 :(得分:0)

对于大型哈希,如果由于任何其他原因不需要排序键,最好避免排序。

#!/usr/bin/env perl

use strict; use warnings;

my %hash = map { $_ => rand(10_000) } 'aa' .. 'zz';

my ($argmax, $max) = each %hash;
keys %hash; # reset iterator

while (my ($k, $v) = each %hash) {
    if ($v >= $max) {
        $max = $v;
        $argmax = $k;
    }
}

print "$argmax => $max\n";

如果您打算进行排序,则只需要具有最大值的键,而不是keysvalues的整个数组:

#!/usr/bin/env perl

use strict; use warnings;

my %hash = map { $_ => rand(10_000) } 'aa' .. 'zz';
my ($argmax) = sort { $hash{$b} <=> $hash{$a} } keys %hash;

print "$argmax => $hash{$argmax}\n";