-2
%HoH = (
Group1=> {
    member1=> "fred",
    member2=> "barney",
},
 Group2 => {
    member1   => "george",
    member2   => "jane",  
},

);

HoHの 2 番目の値または 2 番目のキーにアクセスするにはどうすればよいですか。各グループ キーの member2 とそれに関連付けられたに アクセスしたいです。

   foreach $key (keys %HoH){
        foreach $value (keys %{$HoH{$key}}){
            print $key."\n";
         }
   }
4

5 に答える 5

3

ハッシュ要素には特定の順序がないため、「2 番目のキー」にも「2 番目の値」にもアクセスできません。print Dumper(\%HoH);イニシャライザが使用した順序とは別のハッシュ要素の順序が得られる可能性があります。特定の順序が必要な場合は、配列のハッシュを使用する必要があります。

my %HoH = (
    Group1=> [ "fred", "barney" ],
    Group2 => [ "george", "jane" ]
);

その後、"fred" as$HoH{Group1}->[0]および "jane" as にアクセスできます$HoH{Group2}->[1]

于 2012-09-18T12:47:46.310 に答える
1

前述のように、ハッシュ キーが格納された順序を決定する方法がないため、実際に 2 番目のキーが必要かどうかはわかりません。一貫したキーのセットに対して同じkeys順序を返すことが保証されていますが、おそらくあなたがそれらを宣言した順序で。

Tie::IxHashただし、順序付きハッシュを調べることはできます。しかし、本当に 2 つのハッシュ間でデータを関連付けたい場合は、順序に依存するのではなく、おそらく構造を再考する必要があります。

また、$member[$i-1]よりも優れてい$hash{'member'.$i}ます。高速であるだけでなく、構造が優れているだけです。「インデックス」キーを使用している場合は、ハッシュではなくリストが必要であることを示しています。

これは、あなたが私に見せているものから、あなたのデータの構造にとってより理にかなっているようです:

my @groups 
    = ( [ qw<fred   barney> ]
      , [ qw<george jane>   ]
      );
于 2012-09-18T14:02:16.560 に答える
1
foreach my $key (keys %HoH)  
{  
    foreach my $value (keys %{$HoH{$key}})  
    {  
        if($value eq "member2") 
        {  
            print $HoH{$key}{$value}."\n";  
        }  
    }
} 
于 2012-09-18T12:35:39.427 に答える
1

以下は各member2キーの値を出力します ( perldoc perldscも参照してください):

use warnings;
use strict;

my %HoH = (
Group1=> {
    member1=> "fred",
    member2=> "barney",
},
 Group2 => {
    member1   => "george",
    member2   => "jane",  
},

);

for (keys %HoH) {
    print "$HoH{$_}{member2}\n";
}
于 2012-09-18T12:37:32.547 に答える
0

別の方法で。

%HoH = (
Group1=> {
    member1=> "fred",
    member2=> "barney",
},
 Group2 => {
    member1   => "george",
    member2   => "jane",
},
);

print map { "$HoH{$_}{'member2'}\n" } keys %HoH;
于 2012-09-18T12:40:01.287 に答える