2012-04-18 84 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