簡體   English   中英

在Perl中,如何在哈希中打印與最大值相對應的鍵?

[英]In Perl, how can I print the key corresponding to the maximum value in a hash?

如何僅打印哈希的第一個鍵和元素?

我已經有一個經過排序的哈希,但是我只想打印第一個鍵和相應的值,謝謝,

最后,感謝大家,我將鍵和值推到兩個不同的@array並打印每個數組的元素0,它的工作原理是:)

哈希具有無序的密鑰。 因此,哈希中沒有第一個密鑰之類的密鑰。

但是,如果您需要首先排序的鍵(用於最大鍵值):

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

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

切記使用<=>代替cmp進行數字排序。

在perl哈希中,沒有密鑰順序。 使用排序功能按所需順序獲取鍵,或者在創建哈希時將鍵推入數組,並且第一個鍵將位於數組的第零個索引中

您可以使用以下代碼,我假設哈希名稱為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;
}

正如Alan所寫-哈希沒有特定的順序,但是您可以對哈希鍵進行排序:

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

或者,根據需要,從keys數組中獲取第一個元素:

my @keys = keys(%hash);
print $keys[0];
foreach my $key (sort keys(%hash)) { 
   print "$key" .  "$hash{$key}" . "\n"; 
   last;
} 

對於較大的哈希,如果由於任何其他原因不需要排序的鍵,最好避免排序。

#!/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";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM