从perl中的嵌套数据结构中提取非=兄弟哈希值的数组

时间:2012-01-11 21:25:02

标签: arrays perl data-structures reference nested

这是我的Data :: Dumper-> Dumper:

创建的数据结构
$VAR1 = {
          'name' => 'genomic',
          'class' => [
                     {
                       'reference' => [
                                      {
                                        'name' => 'chromosome',
                                        'referenced-type' => 'Chromosome'
                                      },
                                      {
                                        'name' => 'chromosomeLocation',
                                        'referenced-type' => 'Location'
                                      },
                                      {
                                        'name' => 'sequence',
                                        'referenced-type' => 'Sequence'
                                      },
                                      {
                                        'name' => 'sequenceOntologyTerm',
                                        'referenced-type' => 'SOTerm'
                                      }
                                    ],
                     }
                   ],
        };

(为清晰起见,修剪)

我想在一行中返回对引用下的每个名称值的数组的引用。

目前我有

$class->[0]{reference}[0..3]{name}

但无济于事。

此示例还有四个带有索引0..3的兄弟哈希,如何独立于元素数表示整个数组?

2 个答案:

答案 0 :(得分:1)

遗憾的是,没有一种简单的语法可以做到这一点。你必须使用map:

my $array_ref = [
    map { $_->{name} } @{ $class->[0]{reference} }
];

然后,如果你转出$ array_ref,你会看到它包含:

$array_ref = [
          'chromosome',
          'chromosomeLocation',
          'sequence',
          'sequenceOntologyTerm'
        ];

如果您需要引用原始字符串(而不是副本),则只需在$_之前使用反斜杠(因此它在地图中为\$_->{name})。

答案 1 :(得分:0)

$class->[0]{reference}是数组引用,因此您必须使用@{}取消引用它:

@{$class->[0]{reference}}

是'整个数组',你可以在最后使用切片语法来获取它的一部分:

@{$class->[0]{reference}}[0..3]

从那里你开始使用一系列hashref,所以你必须用formap迭代它。