從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