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

hel*_*_me 0 perl hash

我有以下内容:

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

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

如果您希望我分享我的其余代码,请告诉我.

谢谢.

ike*_*ami 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;
}
Run Code Online (Sandbox Code Playgroud)

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

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

如果你不能确保保证,那就更长了一点.

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};
}
Run Code Online (Sandbox Code Playgroud)

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

  • 在执行列表切片时需要parens. (2认同)