Perl:在排序的散列中键入第一个元素

Perl:在排序的散列中键入第一个元素,perl,hash,Perl,Hash,我有以下资料: . . . foreach my $op(reverse sort {$count{$a} <=> $count{$b}} keys %count) { printf "%-25s %s\n", $op, $count{$op}; } . . . 。 . . foreach my$op(反向排序{$count{$a}$count{$b}}键%count){ printf“%-25s%s\n”,$op,$count{$op}; } . . . 这基本上

我有以下资料:

.
.
.
foreach my $op(reverse sort {$count{$a} <=> $count{$b}} keys %count) {
       printf "%-25s %s\n", $op, $count{$op};
}
.
.
.
。
.
.
foreach my$op(反向排序{$count{$a}$count{$b}}键%count){
printf“%-25s%s\n”,$op,$count{$op};
}
.
.
.
这基本上是对列表中的所有元素进行排序。我只想输入前三个元素,而不是全部,这三个元素是重复次数最多的元素,即计数最高的元素

请让我知道,如果你想让我分享我的代码的其余部分


谢谢。

您确实可以给我们一个柜台

my $limit = 3;
for my $op ( reverse sort { $count{$a} <=> $count{$b} } keys %count ) {
    printf "%-25s %s\n", $op, $count{$op};
    last if !--$limit;
}
my$limit=3;
对于我的$op(反向排序{$count{$a}$count{$b}}键%count){
printf“%-25s%s\n”,$op,$count{$op};
最后一个if!-$limit;
}
如果保证至少有三个元素,则可以使用列表切片

for my $op ( ( reverse sort { $count{$a} <=> $count{$b} } keys %count )[0..2] ) {
    printf "%-25s %s\n", $op, $count{$op};
}
用于我的$op((反向排序{$count{$a}$count{$b}}键%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};
}
my@ops=反向排序{$count{$a}$count{$b}}键%count;
如果@ops>3,则拼接(@ops,3);
对于我的$op(@opts){
printf“%-25s%s\n”,$op,$count{$op};
}

如果@ops>3
阻止在旧版本的Perl中发出警告。)

您确实可以给我们一个计数器

my $limit = 3;
for my $op ( reverse sort { $count{$a} <=> $count{$b} } keys %count ) {
    printf "%-25s %s\n", $op, $count{$op};
    last if !--$limit;
}
my$limit=3;
对于我的$op(反向排序{$count{$a}$count{$b}}键%count){
printf“%-25s%s\n”,$op,$count{$op};
最后一个if!-$limit;
}
如果保证至少有三个元素,则可以使用列表切片

for my $op ( ( reverse sort { $count{$a} <=> $count{$b} } keys %count )[0..2] ) {
    printf "%-25s %s\n", $op, $count{$op};
}
用于我的$op((反向排序{$count{$a}$count{$b}}键%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};
}
my@ops=反向排序{$count{$a}$count{$b}}键%count;
如果@ops>3,则拼接(@ops,3);
对于我的$op(@opts){
printf“%-25s%s\n”,$op,$count{$op};
}

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

您确定
$count{$a}$final{$b}
正确吗?不是
$count{$a}$count{$b}
?通常只使用一个计数器,如果这个计数器达到您需要的数字,就中断循环(使用
last
)。@tivn很抱歉,这是我在这里复制代码时犯的错误。谢谢。你确定
$count{$a}$final{$b}
正确吗?不是
$count{$a}$count{$b}
?通常只使用一个计数器,如果这个计数器达到您需要的数字,就中断循环(使用
last
)。@tivn很抱歉,这是我在这里复制代码时犯的错误。谢谢。哦,这是正确的写法!尝试了类似的操作,但出现语法错误。非常感谢。执行列表切片时需要参数。
$#ops=3-1如果可能比拼接好。@Саа27,我更喜欢
拼接(@ops,3)3,则代码>超过
$#ops=3-1。很多[LOL,那个偶然的打字错误证明了这一点。]imo,即使是切片也比拼接好
@ops=@ops[0..2]if..;:)哦,这是正确的编写方法!尝试了类似的操作,但出现语法错误。非常感谢。执行列表切片时需要参数。
$#ops=3-1如果可能比拼接好。@Саа27,我更喜欢
拼接(@ops,3)3,则代码>超过
$#ops=3-1。很多[LOL,那个偶然的打字错误证明了这一点。]imo,即使是切片也比拼接好
@ops=@ops[0..2]if..;:)