2

给定以下匿名哈希数组:

$AoH = [
    {    
         'FORM_FIELD_ID'        => '10353',
         'VISIBLE_BY'           => '10354',
         'FIELD_LABEL'          => 'ISINCIDENT',
         'VALUE'                => '',
         'DEFAULT_FIELD_LABEL'  => 'Yes No',
         'FORM_ID'              => '2113',
    },
    {
         'FORM_FIELD_ID'        => '10354',
         'VISIBLE_BY'           => '0',
         'FIELD_LABEL'          => 'CATEGORY',
         'VALUE'                => 'zOS Logical Security (RACF)',
         'DEFAULT_FIELD_LABEL'  => 'CATEGORY',
         'FORM_ID'              => '2113',
    },
    {
         'FORM_FIELD_ID'        => '10368',
         'VISIBLE_BY'           => '10354',
         'FIELD_LABEL'          => 'STARTDATE',
         'VALUE'                => '',
         'DEFAULT_FIELD_LABEL'  => 'REQTYPE',
         'FORM_ID'              => '2113',

    }
];

FIELD_LABEL鉴于我知道FORM_FIELD_ID是 10353 ,我将如何直接访问该值?

我知道我可以循环并基于@$AoH有条件地查找,但是如果已知同一哈希中的其他值之一,是否可以直接访问所需的值?$_->{FIELD_LABEL}$_->{FORM_FIELD_ID} == 10353

4

2 回答 2

4

不,除非你改变你的数据结构。例如,您可以通过它们的表单字段 id 索引记录:

my %by_form_field_id = map { $_->{FORM_FIELD_ID} => $_ } @$AoH;

然后:

my $field_label = $by_form_field_id{10353}{FIELD_LABEL};

在不改变数据结构的情况下,你真的必须grep

my $field_label = (grep { $_->{FORM_FIELD_ID} == 10353 } @$AoH)[0]->{FIELD_LABEL};
于 2013-07-08T19:12:07.753 回答
0

您必须编写一个函数循环@array并检查%hash或者使用内置grep方法:

say $_->{FIELD_LABEL} for (grep { $_->{FORM_FIELD_ID} == 10353 } @$AoH )

作品。这也是如此:

say %$_->{FIELD_LABEL} for (grep { $_->{FORM_FIELD_ID} == 10353 } @$AoH ) 

但它会Using a hash as a reference is deprecated发出警告(带有pumpkin perl-5.16.3)。

于 2013-07-08T19:41:35.797 回答