在 Perl 中根据哈希中的值进行排序的简单方法

问题描述 投票:0回答:3

通常根据键排序然后迭代哈希可以如下完成:

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

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

perl
3个回答
9
投票

这会按 value 而不是 key%age

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

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

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


6
投票

如果您希望排序比较器是

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);
}

2
投票

如何对哈希进行排序(可以选择按值而不是键)?

如果您要使用 Perl 进行编程,那么您真的应该花时间阅读 FAQ

© www.soinside.com 2019 - 2024. All rights reserved.