如何构建哈希表的哈希表

3

我需要比较两个哈希值,但是我无法获取内部键的集合...

my %HASH = ('first'=>{'A'=>50, 'B'=>40, 'C'=>30},
            'second'=>{'A'=>-30, 'B'=>-15, 'C'=>9});
foreach my $key (keys(%HASH))
{
   my %innerhash = $options{$key};
   foreach my $inner (keys(%innerhash))
   {
      print "Match: ".$otherhash{$key}->{$inner}." ".$HASH{$key}->{$inner};
   }
}
2个回答

4

$options{$key} 是一个标量(可以通过前导的 $ 符号判断)。您需要“解引用”它以将其用作哈希表:

my %HASH = ('first'=>{'A'=>50, 'B'=>40, 'C'=>30},
            'second'=>{'A'=>-30, 'B'=>-15, 'C'=>9});
foreach my $key (keys(%HASH))
{
   my %innerhash = %{ $options{$key} };  # <---- note %{} cast
   foreach my $inner (keys(%innerhash))
   {
      print "Match: ".$otherhash{$key}->{$inner}." ".$HASH{$key}->{$inner};
   }
}

当您准备深入了解这些内容时,请参见perllolperldscperlref


说明:本文介绍的it技术相关内容,如需深入学习请参见上文提到的链接。

我从未想过在PERL中可以强制转换变量类型,非常感谢你! - Eric Fossum
1
@mob的回答是“perldoc perlreftut”中“使用规则1”的应用,因此您应该从该文档开始。 - tadmc

1

我猜你说的“options”应该是指“HASH”吧?

HASH只能存储标量,而不能存储其他的HASH;每个%HASH的值都是需要解引用的HASH引用,因此你的内部循环应该是:

foreach my $inner (keys(%{ $HASH{$key} })

或者:

my %HASH = ('first'=>{'A'=>50, 'B'=>40, 'C'=>30},
            'second'=>{'A'=>-30, 'B'=>-15, 'C'=>9});
foreach my $key (keys(%HASH))
{
    my $innerhash = $HASH{$key};
    foreach my $inner (keys(%$innerhash))
    {
        print "Match: ".$otherhash{$key}->{$inner}." ".$innerhash->{$inner};
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接