【问题标题】:Regarding complex hashes in perl关于 perl 中的复杂哈希
【发布时间】:2011-09-29 14:48:20
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 你的问题对我来说不够清楚。请发布一些代码。
  • -1。请更清楚你的要求,大声哭泣,请用英文写(不是文字说话)。一些提示:句子以大写字母开头,以一个句号结尾,而不是两个或三个。人称代词 I 总是大写。 “nad”的正确拼写是“and”,“everythin”是“everything”,“numebr”是“number”。在您的帖子中投入更多精力,这里的人更有可能投入精力撰写回复。

标签: perl hash perl-data-structures


【解决方案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};
    }
}

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2013-01-04
      • 1970-01-01
      • 1970-01-01
      • 2020-05-11
      • 1970-01-01
      • 2017-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多