按值对哈希进行排序,然后在Perl中对键的一部分进行排序

时间:2012-09-19 22:13:33

标签: perl sorting hash

我有一个名称和等级(键)的哈希值和一个数字(值)格式为:

"\nName\nSecondName\nRank: 12345/150000" => 100

"\nThirdName\nFourthName\nRank: 24567/150000" => 71

"\nFifthName\nSixthName\nRank: 10101/150000" => 71

等等150,000次......

使用Perl,我想主要通过值编号对哈希进行排序,然后按第一个排名编号对其进行排序,如下所示:

"\nName\nSecondName\nRank: 12345/150000" => 100

"\nFifthName\nSixthName\nRank: 10101/150000" => 71

"\nThirdName\nFourthName\nRank: 24567/150000" => 71

1 个答案:

答案 0 :(得分:2)

my @ordered_keys =
    sort {
       $hash{$b} <=> $hash{$a}
    ||
       ($a =~ m{: ([0-9]+)/})[0] <=> ($b =~ m{(: [0-9]+)/})[0]
    }
    keys %hash;

for my $key (@ordered_keys) {
   my $val = $hash{$key};
   ...
}