Perl 哈希排序哈希的元素限制

Perl 哈希排序哈希的元素限制,perl,Perl,我想根据其中一个键的值对哈希进行排序,并只打印5个最佳结果。我试图用一段时间做这件事,但不幸的是失败了 示例值 key1 = 1 key2 = 2 key3 = 3 key4 = 4 key5 = 5 key6 = 6 key7 = 7 我的尝试: my limit = 5; while (my $keys (sort {$hoh{$b}{aaaa}<=>$hoh{$a}{aaaa}) && my $i <= $limit) { $i++; print

我想根据其中一个键的值对哈希进行排序,并只打印5个最佳结果。我试图用一段时间做这件事,但不幸的是失败了

示例值

key1 = 1
key2 = 2
key3 = 3
key4 = 4
key5 = 5
key6 = 6
key7 = 7
我的尝试:

my limit = 5;
while (my $keys (sort {$hoh{$b}{aaaa}<=>$hoh{$a}{aaaa}) && my $i <= $limit) {
  $i++;
  print "KEY: $keys VALUE1: $hoh{$keys}->{aaaa} VALUE2: $top_strategies{$keys}->{bbbb}   \n";
}
我的结果是:

syntax error at backtest.pl line 252, near "$keys ("
syntax error at backtest.pl line 252, near "}<=>"
backtest.pl第252行“$keys(”
backtest.pl第252行“}”附近的语法错误

我做错了什么?或者是否有其他解决方案来实现这一点?

您不希望使用
while
循环,因为这样会重复“旋转”排序。
while
在条件为“true”时重复运行,并且多次重新排列列表不是您想要做的

此外,在对某些内容进行排序时,您需要指定要排序的内容。您已经告诉sort使用子例程(比较
$hoh
元素),但没有指定基于该比较排序的内容。您可能希望对
键%hoh
进行排序

首先对列表进行排序,然后获取前5个元素

您可以使用“for”循环执行此操作:

my $count = 0;
my $limit = 5;
for my $key ( sort {$hoh{$b}{aaaa}<=>$hoh{$a}{aaaa}) keys %hoh ) { 
    print "$key $hoh{$key}{'aaaa'} $hoh{$key}{'bbbb'}\n";  
    last if $count++ > $limit;
}
my$count=0;
我的$limit=5;
对于我的$key(排序{$hoh{$b}{aaaa}$hoh{$a}{aaaa})键%hoh{
打印“$key$hoh{$key}{'aaaa'}$hoh{$key}{'bbbb'}\n”;
如果$count++>$limit,则为最后一个;
}

稍微了解一下上下文就好了。比如你的散列(“%hoh”,“top_策略”)实际上是什么样子(作为一个可执行语句)。一个完整的小脚本在它的环境中演示这个问题就很理想了。
my $count = 0;
my $limit = 5;
for my $key ( sort {$hoh{$b}{aaaa}<=>$hoh{$a}{aaaa}) keys %hoh ) { 
    print "$key $hoh{$key}{'aaaa'} $hoh{$key}{'bbbb'}\n";  
    last if $count++ > $limit;
}