在哈希中打印特定数量的键/值对

Raz*_*nok 3 perl

我有一个哈希,用于存储键值对的数量,这些值是从输入文档中提取的字符串数组进行排序并打印出来的。

%count = ();
foreach $string (@strings) {
    $count{$string}++;
}
foreach my $key (sort {$count{$b} <=> $count{$a} } keys %count) {
    print $key, ": ", $count{$key} ; 
}
Run Code Online (Sandbox Code Playgroud)

所以我想知道是否有一种方法只能在哈希中打印一定数量的键值对,而不是全部?即打印值的前5名?

编辑:for循环可以解决这个问题吗?

zdi*_*dim 5

可以从排序返回的列表中出一部分

use strict;
use warnings;
use feature 'say';

....

my %count;    
foreach my $string (@strings) {
    ++$count{$string}
}

say "$_: $count{$_}" 
    for ( sort { $count{$b} <=> $count{$a} } keys %count )[0..4];
Run Code Online (Sandbox Code Playgroud)

(这期望哈希确实有五个键;如果可能发生这种情况,那么您将不会受到警告的打击,因此请在这种情况下添加一个测试$_ and say "..." for ...

问题中的代码显然没有使用strict;我建议始终使用它。

%count = ()如果以前已经填充了哈希并且现在需要将其清空,这是有道理的。如果要创建它,则只需声明(并且不带= (),则不执行任何操作)。


注意,感谢Grinnz:最近的List :: Util 1.50添加head(和tail)函数