3

2 つのハッシュを比較する必要がありますが、キーの内部セットを取得できません...

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

2 に答える 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};
   }
}

これらの内容に実際に飛び込む準備ができたらperllolperldscおよびを参照してくださいperlref

于 2011-07-15T16:54:23.700 に答える
1

「ハッシュ」を意味するところに「オプション」と言っていると思いますか?

ハッシュはスカラーのみを格納し、他のハッシュは格納しません。%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};
    }
}
于 2011-07-15T17:05:43.583 に答える