关于perl中的复杂哈希

关于perl中的复杂哈希,perl,hash,perl-data-structures,Perl,Hash,Perl Data Structures,我有一个散列,其中第一个键是name,第二个键是一些类,如a级,B级,C级,值是d学生总数 %hash{name}->{class}->number 所以我填充了我的散列,所有的事情都完成了,但是现在当我打印时,我得到了数字,但是如果假设一个学生的名字在a级和C级,而不是B级,它应该显示出来 Name:level A = 1 level B = 0 level C = 1 我怎样才能得到这样的结果?请帮帮我。这有点牵强,但我认为您所追求的是为所有($hash{name}->

我有一个散列,其中第一个键是name,第二个键是一些类,如
a级
B级
C级
,值是d学生总数

%hash{name}->{class}->number

所以我填充了我的散列,所有的事情都完成了,但是现在当我打印时,我得到了数字,但是如果假设一个学生的名字在a级和C级,而不是B级,它应该显示出来

Name:level A = 1
     level B = 0
     level C = 1

我怎样才能得到这样的结果?请帮帮我。

这有点牵强,但我认为您所追求的是为所有(
$hash{name}->{class}
未定义的(名称、类)对分配一个零值。所以,考虑到

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};
    }
}
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};
    }
}
my@classes#首先,我们获取所有可能的类。
foreach my$name(排序键%hash)
{
foreach my$类(排序键%{$hash->{$name})
{
推送@classes,$class,除非$class~~@classes;
}
}
@classes=sort@classes#或sort{$a$b}@classes,具体取决于数据类型。。。
foreach my$name(排序键%hash)
{
foreach my$class(@classes)
{
$hash->{$name}->{$class}=0,除非定义了$hash->{$name}->{$class};
}
}

你的问题对我来说不够清楚。请发一些密码。请更清楚地说出你的要求,如果你大声喊叫,请用英语书写(而不是用文字)。一些提示:句子以大写字母开头,以一个句点结束,而不是两个或三个句点。人称代词I总是大写。“nad”的正确拼写是“and”,“everythin”是“everythin”,“numebr”是“number”。在你的帖子上多投入一点精力,这里的人就更有可能在写回复上投入精力。