Perl:在排序的哈希中键入第一个元素

时间:2015-04-13 17:43:19

标签: perl hash

我有以下内容:

.
.
.
foreach my $op(reverse sort {$count{$a} <=> $count{$b}} keys %count) {
       printf "%-25s %s\n", $op, $count{$op};
}
.
.
.

这基本上是我列表中排序的所有元素。我只想输入前三个元素而不是所有元素,这三个元素是最重复的元素,即具有最高计数。

如果您希望我分享其余代码,请与我们联系。

谢谢。

1 个答案:

答案 0 :(得分:5)

你确实可以给我们一个柜台。

my $limit = 3;
for my $op ( reverse sort { $count{$a} <=> $count{$b} } keys %count ) {
    printf "%-25s %s\n", $op, $count{$op};
    last if !--$limit;
}

如果您至少保证三个元素,则可以使用列表切片。

for my $op ( ( reverse sort { $count{$a} <=> $count{$b} } keys %count )[0..2] ) {
    printf "%-25s %s\n", $op, $count{$op};
}

如果你不能确保保证,那就多久了。

my @ops = reverse sort { $count{$a} <=> $count{$b} } keys %count;
splice(@ops, 3) if @ops > 3;
for my $op (@opts) {
    printf "%-25s %s\n", $op, $count{$op};
}

if @ops > 3可防止旧版Perl中出现警告。)