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)如果@opts>3,则代码>超过$#ops=3-1代码>。很多[LOL,那个偶然的打字错误证明了这一点。]imo,即使是切片也比拼接好@ops=@ops[0..2]if..;:)代码>哦,这是正确的编写方法!尝试了类似的操作,但出现语法错误。非常感谢。执行列表切片时需要参数。$#ops=3-1如果代码>可能比拼接好。@Саа27,我更喜欢拼接(@ops,3)如果@opts>3,则代码>超过$#ops=3-1代码>。很多[LOL,那个偶然的打字错误证明了这一点。]imo,即使是切片也比拼接好@ops=@ops[0..2]if..;:)代码>