我正在尝试使用此代码,但它尝试对键进行排序,但由于它们不是数字,因此无法对其进行排序.
foreach my $word (sort {$b <=> $a} keys %wordHash) {
printf ("%-20s %10d\n", $word, $wordHash{$word});
}
Run Code Online (Sandbox Code Playgroud)
如果要按值顺序打印哈希值,则只需比较sort块中的值而不是比较键本身:
{ $wordHash{$b} <=> $wordHash{$a} }
# The rest of your code stands
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为使用的块sort可以是任意逻辑的任何匿名子程序; 只要它返回正/ 0 /负值.
如果你只想要排序的值而不管键,甚至更简单(看起来有点无意义,所以我假设你想要前一个选项,但以防万一我也会回答这个问题):
sort {$b <=> $a} values %wordHash
Run Code Online (Sandbox Code Playgroud)此外,如果要按键顺序打印但按字母顺序而不是数字排序,则默认排序按词法排序(相同{ $a cmp $b }):
sort keys %wordHash # sort in ascending alphanumeric
reverse sort keys %wordHash # sort in descending alphanumeric
sort { $b cmp $a } keys %wordHash # same: descending alphanumeric,
# faster on large data but less readable
Run Code Online (Sandbox Code Playgroud)