通常基于键进行排序然后迭代哈希可以完成如下:
for $k (sort (keys %h)) {
print $k, $h{$k};
}
但是如何根据值进行排序然后迭代哈希?我可以考虑通过交换键和值对来创建新的哈希。但有没有更聪明的方法呢?
非常感谢。
答案 0 :(得分:6)
按值而不是键
对%age 哈希进行排序@eldest = sort { $age{$b} <=> $age{$a} } keys %age;
这会根据值进行排序。 有关更多详细信息,请参阅Perl Doc:
答案 1 :(得分:5)
如果您希望排序比较器不是cmp
,您可以提供代码块或子程序作为sort
的第一个参数。有关详细信息,请参阅the documentation。
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);
}
答案 2 :(得分:2)
How do I sort a hash (optionally by value instead of key)?
如果您打算使用Perl进行编程,那么您应该花些时间阅读FAQ。