将Perl哈希从最大到最小排序

sea*_*man 4 perl hash perl-hash

我正在查看此处的示例:http://perlmeme.org/tutorials/sort_function.html

它给出了这段代码,根据每个键的值对哈希进行排序:

# Using <=> instead of cmp because of the numbers
    foreach my $fruit (sort {$data{$a} <=> $data{$b}} keys %data) {
        print $fruit . ": " . $data{$fruit} . "\n";
    }
Run Code Online (Sandbox Code Playgroud)

这段代码我不完全理解,但是当我试验它时,它从最低到最高排序.如何翻转它从最高到最低排序?

Ωme*_*ega 14

只需使用reverse sort而不是sort.

foreach my $fruit (reverse sort keys %data) { ...

  • @MarkReed:这似乎声称`reverse`效率不低:http://search.cpan.org/~thaljef/Perl-Critic-1.117/lib/Perl/Critic/Policy/BuiltinFunctions/ProhibitReverseSortBlock.pm (5认同)
  • 这是有效的,但排序然后反转列表的效率低于仅仅首先交换比较意义. (2认同)

che*_*ner 12

交换$a$b:

foreach my $fruit (sort {$data{$b} <=> $data{$a}} keys %data) {
Run Code Online (Sandbox Code Playgroud)