关于perl中的复杂哈希

发布于 2024-11-18 11:56:00 字数 350 浏览 3 评论 0原文

我有一个哈希值,其中第一个键是名称,第二个是一些类,例如 level Alevel Blevel C 和值是 d 学生总数..

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

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

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

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

I have a hash of hash, where my first key is name and second is some classes like level A, level B, level C and the values is d total number of students..

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

So I fill my hash and everything is done but now when I print I get the number but if suppose a student name is in level A and level C and not in level B it should show

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

How can I get my result like this? Please help me out..

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

凯凯我们等你回来 2024-11-25 11:56:00
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};
    }
}
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};
    }
}
魔法唧唧 2024-11-25 11:56:00

这有点牵强,但我认为您所追求的是为 $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};
    }
}

This is a bit of a stretch, but what I think you're after is to assign a value of zero to all (name,class) pairs for which $hash{name}->{class} is undefined. So, given that...

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};
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文