使用存储在Perl中的数组哈希中的键来切片哈希

时间:2012-09-17 20:23:24

标签: perl hash slice

受到另一个问题答案的启发:Slicing a nested hash in Perl,使用另一个哈希中的键列表来切割哈希的语法是什么?

我认为以下会这样做,但事实并非如此:

@slice_result = @{$hash1{@($hash_2{$bin})}};

我收到"scalar found where operator expected"的错误消息。 ?

2 个答案:

答案 0 :(得分:1)

这是基于另一个哈希的键的哈希切片的正确语法:

my %hash1 = ( 'this' => 2,
              'that' => 1,
            );
my %hash2 = ( 'this' => 'two',
              'that' => 'one',
            );


my @slice = @hash1{keys %hash2};


print @slice # prints 12;

答案 1 :(得分:1)

您对数据的模糊描述让我觉得您甚至不确定您的数据。您应该花一些时间来吸收数据结构,直到您能够清楚地描述它为止。

我想你说你有

my %hash1 = (
   apple  => 2,
   banana => 3,
   orange => 4,
);

my %hash2 = (
   red    => [qw( apple        )],
   yellow => [qw( apple banana )],
   orange => [qw( orange       )],
);

您希望将%hash2上的某个元素引用的数组用作%hash1切片的键。如果你理解这一点,那只是一步一步做的问题。

$hash2{yellow}

将为我们提供所需数组的引用,

@{ $hash2{yellow} }

将为我们提供数组本身。我们希望将其用作哈希切片的索引表达式

@hash1{EXPR}

所以我们得到:

@hash1{ @{ $hash2{yellow} } }    # 2,3