【问题标题】:The simple way to sort based on values in a hash in perlperl中基于哈希值排序的简单方法
【发布时间】:2011-06-25 01:59:58
【问题描述】:

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

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

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

非常感谢。

【问题讨论】:

  • perldoc -q sort:如何对哈希进行排序(可选按值而不是键)?

标签: perl


【解决方案1】:

这会按 value 而不是 key

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

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

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

【讨论】:

    【解决方案2】:

    如果您希望排序比较器不是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);
    }
    

    【讨论】:

      【解决方案3】:

      How do I sort a hash (optionally by value instead of key)?

      如果你打算用 Perl 编程,那么你真的应该花时间阅读FAQ

      【讨论】:

        猜你喜欢
        • 2010-10-20
        • 1970-01-01
        • 1970-01-01
        • 2012-01-08
        • 2015-07-19
        • 1970-01-01
        • 2012-09-18
        • 1970-01-01
        • 2013-05-25
        相关资源
        最近更新 更多