通常根据键排序然后迭代哈希可以如下完成:
for $k (sort (keys %h)) {
print $k, $h{$k};
}
但是如何根据值进行排序,然后迭代哈希呢?我可以考虑通过交换键和值对来创建一个新的哈希。但是有更聪明的方法吗?
这会按 value 而不是 key 对 %age
哈希进行排序@eldest = sort { $age{$b} <=> $age{$a} } keys %age;
这会根据值进行排序。 有关更多详细信息,请参阅 Perl 文档:
如果您希望排序比较器是
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);
}
如果您要使用 Perl 进行编程,那么您真的应该花时间阅读 FAQ。