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

时间:2019-03-01 20:18:01

标签: perl

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

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

所以我想知道是否有一种方法可以仅在哈希中打印一定数量的键-值对,而不是全部?即根据值打印前5位?

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

2 个答案:

答案 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)功能