2

我有一个数组哈希(HoA)。我一直在使用$arrayrefs. 但是,现在我需要检索$key基于$arrayrefs.

my %a =  ( 1 => "ONE" , 
           2 => "TWO" ,
           3 => " Three", );

my %aa =  ( 4 => [ 'ONE' , 'TWO', 'THREE'], 
            5 => ['one' , 'two', 'three'],
            6 => ['more', 'dos', 'some'],
);

my @array = ('ONE' , 'TWO', 'THREE');
my $array_ref = \@array;

# returns the $key where the $value is 'ONE'
my ($any_match) = grep { $a{$_} eq 'ONE' } keys %a;
print $any_match."\n"; # this returns '1', as expected.. Good!

my ($match) = grep { $aa{$_} eq @$array_ref } keys %aa;
print $match."\n";  # <--- error: says that match is uninitialized

在最后一个print语句中,我希望它返回 4。有人知道该怎么做吗?

4

2 回答 2

3

您不能将数组与eq. 一个简单的解决方案是将两个数组都转换为字符串并使用以下方法比较字符串eq

my ($match) = grep { join("", @{$aa{$_}}) eq join("", @$array_ref) } keys %aa;

为了比较数组,您还可以使用 CPAN 中的许多模块之一,例如Array::Compare,List::Compare等。

于 2013-03-23T06:48:41.010 回答
2

总是use strict; use warnings;。添加use v5.10;因为 Perl (v5.10+) 的智能匹配将用于比较数组。请执行下列操作:

my ($match) = grep { @{$aa{$_}} ~~ @$array_ref } keys %aa;

此处使用智能运算符~~来比较数组。

于 2013-03-23T06:54:06.477 回答