基于perl中散列值的简单排序方法

时间:2011-05-12 00:54:57

标签: perl

通常基于键进行排序然后迭代哈希可以完成如下:

for $k (sort (keys %h)) {
  print $k, $h{$k};
}

但是如何根据值进行排序然后迭代哈希?我可以考虑通过交换键和值对来创建新的哈希。但有没有更聪明的方法呢?

非常感谢。

3 个答案:

答案 0 :(得分:6)

而不是

%age 哈希进行排序
@eldest = sort { $age{$b} <=> $age{$a} } keys %age;

这会根据值进行排序。 有关更多详细信息,请参阅Perl Doc:

http://perldoc.perl.org/functions/sort.html

答案 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

相关问题