从perlfaq4,答案"http://faq.perl.org/perlfaq4.html#How_do_I_sort_a_hash"有你最需要的放在一起你的代码的信息。
你可能也想看看排序的章节学习Perl。
克里斯有一个完全正确的答案,虽然我讨厌使用values
这样的。一个更熟悉的方式做同样的事情是要经过顶级哈希的密钥,但排序第二级重点:
my @sorted_hashes =
sort { $hash2->{$a}{count} <=> $hash2->{$b}{count} }
keys %hash2;
我做这种方式,因为它是有点不太令人费解。
如何对散列进行排序(可选择使用值而不是键)?
(贡献的布莱恩d FOY)
要排序的散列,与键启动。在这个例子中,我们给出了排序函数的关键字列表,然后将它们用ASCIIbet进行比较(这可能会受到您的语言环境设置的影响)。输出列表具有按ASCII顺序排列的键。一旦我们拥有了密钥,我们就可以通过它们来创建一个报告,按ASCII顺序列出密钥。
my @keys = sort { $a cmp $b } keys %hash;
foreach my $key (@keys)
{
printf "%-20s %6d\n", $key, $hash{$key};
}
虽然我们可以在sort()块中获得更多花式。我们可以用它们计算一个值,并将该值用作比较,而不是比较键。
例如,为了让我们的报表顺序不区分大小写,我们在双引号字符串中使用\ L序列使所有内容都为小写。 sort()块然后比较小写的值以确定按照何种顺序放置键。
my @keys = sort { "\L$a" cmp "\L$b" } keys %hash;
注:如果计算是昂贵或哈希有很多元素,你可能想看看使用Schwartzian变换缓存的计算结果。
如果我们想用散列值进行排序,我们使用散列键来查找它。我们仍然拿出一个键列表,但这次他们按照它们的价值排序。
my @keys = sort { $hash{$a} <=> $hash{$b} } keys %hash;
从那里我们可以变得更加复杂。如果散列值相同,我们可以在散列键上提供第二排序。
my @keys = sort {
$hash{$a} <=> $hash{$b}
or
"\L$a" cmp "\L$b"
} keys %hash;
你的意思是你想通过从HASH2的值数排序的哈希值(如HASH1)的名单? – Jagmal 2009-04-13 06:24:31
是Jagmal,这意味着我想对$ hash2 {“asd”} {count}进行排序。 – systemsfault 2009-04-13 06:29:26