Le *_*Ray 1 sorting perl hash key
我有一个哈希
%grades{$subject}{$student}=$score
Run Code Online (Sandbox Code Playgroud)
我试图从哈希中需要排序的学生中提取每个主题的前30个分数,但我不确定如何对多个密钥哈希进行排序.
到目前为止,我有这个,但这给了我每一个得分而不是每个科目所需的前30名.此外,有更快的方式来执行查询,因为我有近200K学生.
foreach my $subject(sort keys %grades) {
foreach my $student(keys %{ $grades{$subject} }) {
print "$subject, $student: $grades{$subject}{$student}\n";
}
}
Run Code Online (Sandbox Code Playgroud)
这为每个主题排序前2个分数(仅用于说明目的).你应该改变0 .. 1对0 .. 29排名前30位:
use warnings;
use strict;
my %grades = (
math => {bill=>55, joe=>66, mike=>77},
hist => {bill=>72, joe=>33, mike=>99},
read => {bill=>95, joe=>24, mike=>22},
);
for my $subject (sort keys %grades) {
my %gr = %{ $grades{$subject} };
for my $student ((reverse sort { $gr{$a} <=> $gr{$b} } keys %gr)[0 .. 1]) {
print "$subject $student $gr{$student}\n";
}
}
__END__
hist mike 99
hist bill 72
math mike 77
math joe 66
read bill 95
read joe 24
Run Code Online (Sandbox Code Playgroud)
请参阅perldoc perldsc以及如何对哈希进行排序(可选择按值而不是键)?