2012-04-18 51 views
3

我在看一个例子这里找到:http://perlmeme.org/tutorials/sort_function.html排序Perl的哈希从最大到最小

,它给这个代码进行排序基于每个键的值的哈希:

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

此代码我做不完全理解,但是当我尝试它时,它从最低到最高排序。我怎样才能翻转它从最高到最低排序?

回答

11

交换$a$b

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

只需使用reverse sort代替sort

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

+2

这样的作品,但排序,然后反向名单不仅仅是交换摆在首位的比较意义上效率较低。 – 2012-04-18 19:25:38

+5

@MarkReed:这似乎声称'reverse'效率并不低:http://search.cpan.org/~thaljef/Perl-Critic-1.117/lib/Perl/Critic/Policy/BuiltinFunctions/ProhibitReverseSortBlock.pm – toolic 2012-04-18 19:45:50

+0

@ MarkReed:'reverse'是更高效且更易读的代码。 – 2012-04-18 20:09:28