【问题标题】:Perl:Access values of hash inside a hashPerl:访问哈希内的哈希值
【发布时间】:2013-06-06 21:07:58
【问题描述】:

我刚刚学习了 Perl。 我对访问哈希值有点困惑。下面是我试图访问散列中散列值的代码。 由于我使用简单的文本编辑器进行编码,我无法弄清楚可能是什么问题。请帮忙

my %box = (
    Milk => {
        A => 5,
        B => 10,
        C => 20,
    },
    Chocolate => {
        AB => 10,
        BC => 25,
        CD => 40,
    },
);

foreach my $box_key(keys %box) {
    foreach my $inside_key (keys %box{box_key})
    print "$box_key"."_$inside_key""is for rupees $box{box_key}{inside_key}";
}

【问题讨论】:

    标签: perl hash perl-data-structures hash-of-hashes perl-hash


    【解决方案1】:

    如果语法是

    keys %hash
    

    对于哈希,它是

    keys %{ ... }
    

    用于哈希引用。在这种情况下,引用存储在$box{$box_key},因此您可以使用

    keys %{ $box{$box_key} }
    

    此外,您正在几个地方访问名为 box_keyinside_key 的元素,而这些元素实际上是由 $box_key$inside_key 命名的元素。


    最后,您可以在变量名周围使用花括号来指示 Perl 变量名的结束位置。


    for my $box_key (keys %box) {
       for my $inside_key (keys %{ $box{$box_key} }) {
          print "${box_key}_$inside_key is for rupees $box{$box_key}{$inside_key}\n";
       }
    }
    

    【讨论】:

      【解决方案2】:

      ikegami 已经解释得很好,我觉得你的代码中仍然缺少一些东西,这就是你遇到问题的原因,试试下面的代码,希望它对你有帮助。

      my %box = (
          Milk => {
              A => 5,
              B => 10,
              C => 20,
          },
          Chocolate => {
              AB => 10,
              BC => 25,
              CD => 40,
          },
      );
      
      foreach my $box_key(keys %box) {
          foreach my $inside_key (keys $box{$box_key}) {
            print "${box_key}_$inside_key is for rupees $box{$box_key}{$inside_key}\n";
      
          }
      }
      

      输出:

      Chocolate_CD is for rupees 40
      Chocolate_BC is for rupees 25
      Chocolate_AB is for rupees 10
      Milk_A is for rupees 5
      Milk_C is for rupees 20
      Milk_B is for rupees 10
      

      【讨论】:

      • 关于风格最好写print $box_key, "_", $inside_key, " .."print "${box_key}_$inside_key .."
      • 你真的不应该给出引用不足的版本的键:在大多数版本的 perl 下这是一个语法错误。
      • 你和我的帖子有什么不同?您似乎只是复制了我的代码,只是您将“for”更改为“foreach”
      猜你喜欢
      • 2010-10-20
      • 1970-01-01
      • 2014-05-06
      • 1970-01-01
      • 2021-05-09
      • 2014-06-18
      • 2013-03-22
      • 1970-01-01
      相关资源
      最近更新 更多