给出以下匿名哈希数组:
$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
是10353,我将如何直接访问FORM_FIELD_ID
值?
我知道我可以遍历@$AoH
并根据$_->{FIELD_LABEL}
有条件地找到$_->{FORM_FIELD_ID} == 10353
,但是如果同一个哈希中的其他值之一,则无论如何都可以直接访问所需的值已知?
答案 0 :(得分: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};
答案 1 :(得分: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
)。