将Perl哈希从最大到最小排序
我正在看下面的一个例子: 它给出了根据每个键的值对哈希进行排序的代码:将Perl哈希从最大到最小排序,perl,hash,perl-hash,Perl,Hash,Perl Hash,我正在看下面的一个例子: 它给出了根据每个键的值对哈希进行排序的代码: # Using <=> instead of cmp because of the numbers foreach my $fruit (sort {$data{$a} <=> $data{$b}} keys %data) { print $fruit . ": " . $data{$fruit} . "\n"; } #由于数字原因,使用而不是cmp foreach
# Using <=> instead of cmp because of the numbers
foreach my $fruit (sort {$data{$a} <=> $data{$b}} keys %data) {
print $fruit . ": " . $data{$fruit} . "\n";
}
#由于数字原因,使用而不是cmp
foreach my$fruit(排序{$data{$a}$data{$b}}键%data){
打印$FROUT。“:”$data{$FROUT}。“\n”;
}
我不完全理解这段代码,但当我尝试使用它时,它从最低到最高排序。如何将其从最高到最低翻转排序?交换
$a
和$b
:
foreach my $fruit (sort {$data{$b} <=> $data{$a}} keys %data) {
foreach my$fruit(排序{$data{$b}$data{$a}}键%data){
只需使用反向排序
而不是排序
foreach my$fruit(反向排序键%data){…
这是可行的,但是排序然后反转列表比一开始就交换比较的意义效率要低。@MarkReed:这似乎声称reverse
的效率并没有降低:@MarkReed:reverse
的效率更高,代码更可读。@toolic:有趣,我不知道。我想知道如果优化扩展到比较$data{$a}
和$data{$b}
,而不仅仅是$a
和$b
。