2017-08-19 19 views
4

ループを使用してmother_hashのすべての配列に新しいハッシュを追加する場合は、どのような構文ですか?ハッシュの配列に新しいハッシュを追加するにはどうすればよいですか?

マイハッシュ:

my %mother_hash = (
    'daughter_hash1' => [ 
     { 
      'e' => '-4.3', 
      'seq' => 'AGGCACC', 
      'end' => '97', 
      'start' => '81' 
     } 
    ], 
    'daughter_hash2' => [ 
     { 
      'e' => '-4.4', 
      'seq' => 'CAGT', 
      'end' => '17', 
      'start' => '6' 
     }, 
     { 
      'e' => '-4.1', 
      'seq' => 'GTT', 
      'end' => '51', 
      'start' => '26' 
     }, 
     { 
      'e' => '-4.1', 
      'seq' => 'TTG', 
      'end' => '53', 
      'start' => '28' 
     } 
    ], 
    #... 
); 
+2

これを試してください: 'push @ {$ _}、\%new_hash for(values%mother_hash); ' –

+0

ありがとうございます。 –

+0

@HåkonHæglandあなたのコメントをコピーして回答に貼り付けてください。それは非常にエレガントな答えです。 –

答えて

2

あなたはハッシュの配列のハッシュを持っていると にアレイのそれぞれの端に新しいハッシュを追加したい場合は、あなたが行うことができます:

push @{ $_ }, \%new_hash for (values %mother_hash); 

このループ%mother_hashの値を反復処理(この場合は配列のrefsです)、繰り返しごとに$_を設定します。次に、各反復で、新しいハッシュ%new_hashへの参照をその配列の最後にプッシュします。

1

mother_hashは、ハッシュの配列のハッシュです。

ハッシュの別のトップレベル配列を追加します。

%mother_hash{$key} = [ { stuff }, { stuff } ]; 

は、埋め込まれた配列にハッシュに別のエントリを追加するには、既存のアレイ

push @{%mother_hash{'key'}} { stuff }; 

に別のエントリを追加するには

%{@{%mother_hash{'top_key'}}[3]}{'new_inner_key'} = value; 
混乱し、「タイプを一致しようとして

ハッシュリファレンス/配列リファレンスを含むハッシュ/配列/スカラーの次のテクニックを使用できます。

use Data::Dumper; 
$Data::Dumper::Terse = 1; 
printf("mother_hash reference = %s\n", Dumper(\%mother_hash)); 
printf("mother_hash of key 'top_key' = %s\n", Dumper(%mother_hash{top_key})); 

など、大規模なデータ構造を見いだし、アクセスまたは変更したい領域に絞っていることを確認してください。

+0

大変ありがとう@Edwin! –

1

最初に私は娘のハッシュがハッシュではなく、匿名のハッシュの配列であることを指摘します。これは%daughter_hash3の内容で無名ハッシュが含まれている匿名の配列を作成します

$mother_hash{daughter_hash3} = [ { %daughter_hash3 } ]; 

:別の娘のハッシュを追加します。 Forループ

$daughter_hash_keyが文字列である

$mother_hash{$daughter_hash_key} = [ { %daughter_hash } ]; 

%mother_hash%daughter_hashのためのキーが追加するためのハッシュであるが含まれています。

は、キー $daughter_hash_keyと娘アレイに別のハッシュを追加するには:

push @{ $mother_hash{$daughter_hash_key} }, { %daughter_hash }; 

私はtiは複雑だ知っているが、私はあなたはそれが正しく成長するかどうかを確認するためにループスルー%mother_hashのたびに内容をダンプするData::Dumperを使用することをお勧め。

use Data::Dumper; 
print Dumper \%mother_hash; 

詳細についてはperldoc Data::Dumperを参照してください。..

Data::Dumperは、Perlに付属している標準モジュールです。標準モジュールの一覧については、perldoc perlmodlibを参照してください。

+0

ありがとう、私はそれを@ショーンに感謝します! –

関連する問題