2

ハッシュ内の特定のキーのすべての値を取得する必要があります。ハッシュは次のようになります。

$bean = {
     Key1 => {
               Key4 => 4,
               Key5 => 9,
               Key6 => 10,
             },
     Key2 => {
               Key7 => 5,
               Key8 => 9,
             },
};

たとえばKey4Key5の値が必要なだけです。Key6残りは重要なポイントではありません。どうすれば値を取得できますか?

更新:だから私は持っていないので、%bean次のように値を追加するだけです$bean:

 $bean->{'Key1'}->{'Key4'} = $value;

お役に立てれば。

4

5 に答える 5

7
foreach my $key (keys %{$bean{Key1}})
{
  print $key . " ==> " . $bean{Key1}{$key} . "\n";
}

印刷する必要があります:

Key4 ==> 4
Key5 ==> 9
Key6 ==> 10
于 2009-12-03T12:19:15.567 に答える
2

%beanがハッシュのハッシュである場合、$bean{Key1}はハッシュ参照です。単純なハッシュと同じようにハッシュ参照を操作するには、次のように逆参照する必要があります。

%key1_hash = %{$bean{Key1}};

ハッシュのハッシュ内の要素にアクセスするには、次のような構文を使用します。

$element = $bean{Key1}{Key4};

のキーと値を出力するループは次の$bean{Key1}とおりです。

print $_, '=>', $bean{Key1}{$_}, "\n" for keys %{$bean{Key1}};

または、値だけが必要で、キーは必要ない場合:

print $_, "\n" for values %{$bean{Key1}};

複雑なデータ構造の操作の詳細については、次の Perl ドキュメントを参照してください: perlreftutperldsc、およびperllol

于 2009-12-03T13:14:29.790 に答える
1

Perlデータ構造を操作する多くの例については、 Perlデータ構造クックブックを参照してください。

于 2009-12-03T17:22:31.563 に答える
1

さらに別の解決策:

for my $sh ( values %Bean ) {
    print "$_ => $sh->{$_}\n" for grep exists $sh->{$_}, qw(Key4 Key5 Key6);
}
于 2009-12-03T13:28:29.587 に答える
0

これを行う良い方法は、投稿しているものが1つのケースではなく例であると仮定すると、再帰的になります。そのため、指定したキーを探してハッシュを検索する関数があり、値の 1 つが別のハッシュへの参照であることがわかった場合は自分自身を呼び出します。

sub recurse_hash {
  # Arguments are a hash ref and a list of keys to find
  my($hash,@findkeys) = @_;

  # Loop over the keys in the hash
  foreach (sort keys %{$hash}) {

    # Get the value for the current key
    my $value = $hash->{$_};

    # See if the value is a hash reference
    if (ref($value) eq 'HASH') {
      # If it is call this function for that hash
      recurse_hash($value,@findkeys);
    }

    # Don't use an else in case a hash ref value matches our search pattern
    for my $key (@findkeys) {
      if ($key eq $_) {
        print "$_ = $value\n";
      }
    }
  }
}

# Search for Key4, Key5 and Key6 in %Bean
recurse_hash(\%Bean,"Key4","Key5","Key6");

次の出力が得られます。

Key4 = 4
Key5 = 9
Key6 = 10
于 2009-12-03T13:15:31.800 に答える