实际上我在Perl中有一个哈希数组,我必须迭代每个哈希值并与所需的字符串进行比较,例如:
@AoH = (
{
husband => "barney",
wife => "betty",
son => "bamm bamm",
},
{
husband => "george",
wife => "jane",
son => "elroy",
},
{
husband => "homer",
wife => "marge",
son => "bart",
},
);
现在我必须在每次迭代中比较儿子值..... 什么是最好的方式
答案 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";
}