我有一个哈希值,其中我的第一个键是名称,第二个键是一些类level A
,例如 , level B
,level C
值是 d 学生总数..
%hash{name}->{class}->number
所以我填写了我的哈希值,一切都完成了,但是现在当我打印时我得到了这个数字,但是如果假设学生姓名在 A 级和 C 级而不是 B 级,它应该显示
Name:level A = 1
level B = 0
level C = 1
我怎样才能得到这样的结果?请帮帮我。。
我有一个哈希值,其中我的第一个键是名称,第二个键是一些类level A
,例如 , level B
,level C
值是 d 学生总数..
%hash{name}->{class}->number
所以我填写了我的哈希值,一切都完成了,但是现在当我打印时我得到了这个数字,但是如果假设学生姓名在 A 级和 C 级而不是 B 级,它应该显示
Name:level A = 1
level B = 0
level C = 1
我怎样才能得到这样的结果?请帮帮我。。
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};
}
}
这有点牵强,但我认为$hash{name}->{class}
您所追求的是为所有未定义的 (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};
}
}