我有一个哈希,用于存储键值对的数量,这些键值对来自输入文档中的字符串数组,然后对其进行排序并打印。
%count = ();
foreach $string (@strings) {
$count{$string}++;
}
foreach my $key (sort {$count{$b} <=> $count{$a} } keys %count) {
print $key, ": ", $count{$key} ;
}
所以我想知道是否有一种方法可以仅在哈希中打印一定数量的键-值对,而不是全部?即根据值打印前5位?
编辑:for循环可以解决这个问题吗?
答案 0 :(得分:4)
%count = ();
foreach $string (@strings) {
$count{$string}++;
}
my $n=0; # variable to keep count of processed keys
foreach my $key (sort {$count{$b} <=> $count{$a} } keys %count) {
# count processed keys (++$n)
# and terminate the loop after processing 5 keys
last if ++$n>5;
print $key, ": ", $count{$key} ;
}
答案 1 :(得分:4)
可以接受排序返回的列表的Grinnz
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];
(这希望哈希确实具有五个键;如果可能发生这种情况,那么您不会被警告击中,因此请在这种情况下添加一个测试,例如$_ and say "..." for ...
)
问题中的代码显然未使用strict
;我建议始终使用它。
如果{hash之前已经填充,现在需要清空,则%count = ()
是有意义的。如果要创建它,则只需声明(不使用= ()
,它什么都不做)。
注意,感谢List::Util 1.50:最近的project name添加了head
(和tail
)功能