arrays - 根据匿名哈希数组中的另一个值直接访问值

标签 arrays perl data-structures hashtable associative-array

给定以下匿名哈希数组:

$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',

    }
];

如果我知道 FORM_FIELD_ID 是 10353,我如何直接访问 FIELD_LABEL 值?

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

最佳答案

不,除非您更改数据结构。你可以例如按表单字段 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};

关于arrays - 根据匿名哈希数组中的另一个值直接访问值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17533832/

相关文章:

javascript - jQuery 过滤器显示数据属性任意或全部

java - 有没有办法缩短java中的for-each循环?

regex - Perl、sed 或 awk 单行更改文件格式

perl - 如何在 Perl 中检查返回值是否为 1

java - 用于存储单词列表的节省空间的数据结构?

c++ - 输出二叉搜索树中叶节点的数量

c++ - 不理解这个二叉搜索树 (BST) 示例算法

java - 给定 "sub-grid"和 "cell-in-the-sub-grid"索引,如何获取数独二维数组索引?

java - 如何在 Java 中拆分字符串以用于数学用途?

perl - AnyEvent::RabbitMQ 关闭 channel 的问题