如何构建哈希的哈希

发布于 2024-11-23 15:17:44 字数 389 浏览 4 评论 0原文

我需要比较两个哈希值,但我无法获取内部密钥集......

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

I need to compare two hashes, but I can't get the inner set of keys...

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

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

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

发布评论

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

评论(2

挽梦忆笙歌 2024-11-30 15:17:44

$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};
   }
}

当您准备好真正深入研究这些内容时,请参阅 perllolperldsc和<一个href="http://search.cpan.org/perldoc?perlref" rel="nofollow">perlref

$options{$key} is a scalar (you can tell be the leading $ sigil). You want to "dereference" it to use it as a hash:

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

When you're ready to really dive into these things, see perllol, perldsc and perlref.

落日海湾 2024-11-30 15:17:44

我猜你说的是“选项”,而你的意思是“哈希”?

哈希值只存储标量,不存储其他哈希值; %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};
    }
}

I'm guessing you say "options" there where you mean "HASH"?

Hashes only store scalars, not other hashes; each value of %HASH is a hash reference that needs to be dereferenced, so your inner loop should be:

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

Or:

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