关于perl中的复杂哈希

时间:2011-07-06 12:56:34

标签: perl hash perl-data-structures

我有哈希哈希值,其中我的第一个键是name,第二个键是level Alevel Blevel C等类,值是d学生总数。

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

所以我填写我的哈希,一切都已完成,但现在当我打印时,我得到了数字,但如果假设学生姓名在A级和C级而不是B级,则应该显示

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

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

2 个答案:

答案 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};
    }
}