Простой способ сортировки на основе значений в хэше в perl
Обычно сортировку по ключам и последующую итерацию хэша можно выполнить следующим образом:
for $k (sort (keys %h)) {
print $k, $h{$k};
}
Но как сделать сортировку на основе значений, а затем перебирать хэш? Я могу придумать, как создать новый хэш, поменяв местами пары ключей и значений. Но есть ли более умный способ сделать это?
Большое спасибо.
3 ответов:
Если вы хотите, чтобы компаратор сортировки был чем-то иным, чем
cmp, Вы можете предоставить блок кода или подпрограмму в качестве первого параметраsort. Смотритедокументацию для получения более подробной информации.my %h = ( aaaa => 'z', bbb => 'x', c => 'y', ); # Sort on hash values. for my $k (sort {$h{$a} cmp $h{$b}} keys %h) { print $k, "\n"; # bbb c aaaa } # Sort using a named subroutine. for my $k (sort by_length keys %h) { print $k, "\n"; # c bbb aaaa } sub by_length { length($a) <=> length($b); }
Это сортирует %age хэш по значению вместо ключа
@eldest = sort { $age{$b} <=> $age{$a} } keys %age;Это делает сортировку на основе значения. Для получения более подробной информации обратитесь к Perl Doc:
Как отсортировать хэш (необязательно по значению, а не по ключу)?
Если вы собираетесь программировать на Perl, то вам действительно нужно найти время, чтобы прочитатьFAQ .
Comments