按照从大到小的顺序排序Perl哈希表

4

我正在查看这里找到的示例: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";
    }

我对这段代码并不完全理解,但在尝试过后,它会按从低到高的顺序进行排序。我该如何将其反转以按从高到低的顺序进行排序?

2个回答

16
只需使用逆序排序而不是排序foreach my $fruit (reverse sort keys %data) { ...

2
这样做是可行的,但是先排序再反转列表比起一开始就交换比较的意义来说效率要低。 - Mark Reed
6
@MarkReed:这似乎声称 reverse 函数并不比其他函数低效:http://search.cpan.org/~thaljef/Perl-Critic-1.117/lib/Perl/Critic/Policy/BuiltinFunctions/ProhibitReverseSortBlock.pm - toolic
@MarkReed:reverse 是更高效和更易读的代码。 - Ωmega
1
@toolic:很有趣,我不知道这一点。我想知道如果优化扩展到比较“$data{$a}”和“$data{$b}”,而不仅仅是“$a”和“$b”。 - chepner

15

交换$a$b:

foreach my $fruit (sort {$data{$b} <=> $data{$a}} keys %data) {

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接