如何在perl中访问哈希数组并将值与所需的字符串进行比较?

时间:2016-07-19 05:48:12

标签: arrays perl hash

实际上我在Perl中有一个哈希数组,我必须迭代每个哈希值并与所需的字符串进行比较,例如:

@AoH = (
{
   husband  => "barney",
   wife     => "betty",
   son      => "bamm bamm",
},
{
   husband => "george",
   wife    => "jane",
   son     => "elroy",
},

{
   husband => "homer",
   wife    => "marge",
   son     => "bart",
},
);

现在我必须在每次迭代中比较儿子值..... 什么是最好的方式

5 个答案:

答案 0 :(得分:1)

您可以简单地遍历数组并每次将son与您想要的字符串进行比较。

my $new_string;
foreach my $entry (@AoH){
  if($entry->{son} eq $desired_string){
    print "Found it.";
    #assigning the value of 'son' to the $new_string
    $new_string = $entry->{son};
  }
}

在这个小例子中,$desired_string是您比较son值的字符串。

如果您只想访问所有哈希值中的所有值,然后搜索该模式,则可以将值存储在临时数组中:

my @tempArray;
foreach my $entry (@AoH){
   push @tempArray, values %{$entry};
}

if( grep($_ eq $desired_string) @tempArray){
  print "one hash contains the desired string as an value";
}

我不确定你想要达到什么目标,但我希望我能进一步帮助你。

答案 1 :(得分:1)

这实际上取决于比较你的意思。如果您希望在哈希之间进行多种类型的比较哈希,其中son是主要焦点,我建议创建一个哈希,其密钥是儿子的名字,值是{{1的数组索引。

$AoH

对于给出的数据,my %sons; for (my $i = 0; $i < @AoH; $i++) { push( @{ $sons{ $AoH[$i]{"son"} } }, $i); } 将是

%sons

现在你知道每个有这个名字的儿子的家庭,并且可以用每个共享家庭中的数据做各种事情。

{
    'elroy' => [1],
    'bamm bamm' => [0],
    'bar' => [2],
}

或者,如果您想知道是否有任何一个家庭有一个名为“George”的儿子,您可以搜索for my $son (keys %sons) { my $num_couples = @{$sons{$son}}; print "There are $num_couples couple(s) with a son who's name is $son.\n"; for my $i (@{$sons{$son}}) { print "Husband: $AoH[$i]{husband}, Wife: $AoH[$i]{wife}\n"; } print "\n"; } 的密钥。

%son

答案 2 :(得分:1)

不确定你真正想要做什么,但基本上如果你想要哈希回来,如果儿子名称eq&#39; myson&#39;然后做一个班轮:

my @hash_with_myson = grep {$_->{son} eq 'myson'} @AoH;

答案 3 :(得分:0)

只需在i上写一个“for”循环,然后通过以下方式访问“son”:

$AoH[i]{son}

答案 4 :(得分:0)

my $son='xxx';
my $result;
foreach my $family(@AoH) {
    push(@$result,$family) if($family->{son} eq $son);
}

foreach my $family(@$result) {
    print $family->{husband}.' '.$family->{wife}.' '.$family->{son} . "\n";
}