【发布时间】:2011-06-25 01:59:58
【问题描述】:
通常基于键排序然后迭代哈希可以如下完成:
for $k (sort (keys %h)) {
print $k, $h{$k};
}
但是如何根据值进行排序,然后遍历散列呢?我可以考虑通过交换键值对来创建一个新的哈希值。但是有没有更聪明的方法呢?
非常感谢。
【问题讨论】:
-
perldoc -q sort:如何对哈希进行排序(可选按值而不是键)?
标签: perl
通常基于键排序然后迭代哈希可以如下完成:
for $k (sort (keys %h)) {
print $k, $h{$k};
}
但是如何根据值进行排序,然后遍历散列呢?我可以考虑通过交换键值对来创建一个新的哈希值。但是有没有更聪明的方法呢?
非常感谢。
【问题讨论】:
标签: perl
这会按 value 而不是 key
对 %age 哈希进行排序@eldest = sort { $age{$b} <=> $age{$a} } keys %age;
这会根据值进行排序。 有关详细信息,请参阅 Perl 文档:
【讨论】:
如果您希望排序比较器不是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);
}
【讨论】:
How do I sort a hash (optionally by value instead of key)?
如果你打算用 Perl 编程,那么你真的应该花时间阅读FAQ。
【讨论】: