我有哈希哈希值,其中我的第一个键是name,第二个键是level A
,level B
,level C
等类,值是d学生总数。
%hash{name}->{class}->number
所以我填写我的哈希,一切都已完成,但现在当我打印时,我得到了数字,但如果假设学生姓名在A级和C级而不是B级,则应该显示
Name:level A = 1
level B = 0
level C = 1
我怎样才能得到这样的结果?请帮帮我......
答案 0 :(得分:3)
use strict;
use warnings;
my %scores = (
homer => { levA => 1, levC => 2 },
bart => { levA => 3, levB => 4 },
);
my %all_levels = map { map {$_ => 1} keys %$_ } values %scores;
for my $h (values %scores){
for my $lev (keys %all_levels){
$h->{$lev} = 0 unless exists $h->{$lev};
}
}
答案 1 :(得分:0)
这有点紧张,但我认为你想要的是为所有(名称,类)对分配一个零值,$hash{name}->{class}
未定义。所以,鉴于......
my @classes; #First, we grab all of the possible classes.
foreach my $name (sort keys %hash)
{
foreach my $class (sort keys %{$hash->{$name}})
{
push @classes, $class unless $class~~@classes;
}
}
@classes=sort @classes #or sort{$a<=>$b}@classes, depending on the datatype...
foreach my $name(sort keys %hash)
{
foreach my $class(@classes)
{
$hash->{$name}->{$class}=0 unless defined $hash->{$name}->{$class};
}
}